超级存储后端
项目描述
如果您确保文件上传永远不会重复比整理文件到整洁的文件夹更重要,您可能想尝试这个包。
用法
您可以通过将以下内容添加到您的Django设置中在全局级别使用存储后端
DEFAULT_FILE_STORAGE = 'dedupebackend.storage.DedupedStorage'
如果您想使用dedupebackend提供的其他功能,您需要像这样将dedupebackend添加到INSTALLED_APPS
INSTALLED_APPS = [ 'dedupebackend', # does not matter what spot ... ]
管理员集成
将dedupebackend添加到INSTALLED_APPS将为您提供一个管理员页面,您可以在其中检查上传的文件。我已经告诉您dedupebackend只是将所有内容扔进一个大文件夹,但这并不意味着您不能为存储添加结构。只是在文件系统级别上不行。您应该通过添加与其他模型的关联来添加结构。添加类别或类似内容非常容易
class FileCategory(models.Model): files = models.ManyToManyField('dedupebackend.UniqueFile') name = models.TextField()
如果您想向dedupebackend管理员添加过滤器,可以尝试以下内容
from dedupebackend.admin import UniqueFileAdmin from dedupebackend.models import UniqueFile admin.site.unregister(UniqueFile) class CategoryUniqueFileAdmin(UniqueFileAdmin): list_filter = UniqueFileAdmin.list_filter + ('filecategory__name',) admin.site.register(UniqueFile, CategoryUniqueFileAdmin)
可能需要一些工作,我从未测试过它 :p
字段
dedupebackend中有一些字段,您可以使用它来代替Django的FileField和ImageField。您将获得一个选择器,您可以使用它从已上传的文件中选择文件。
使用类似以下的内容
from dedupebackend.fields import * class KoeHenkModel(model.Model): name = models.TextField() file = UniqueFileField("A normal file, nothing special") image = UniqueImageField("an image")
它是如何工作的?
对于每个上传的文件,dedupebackend都会在磁盘上根据文件的哈希值创建一个文件。这与git的做法大致相同(我实际上尝试使用libgit2来做这件事,但git在删除方面表现不佳)。在文件旁边,一个表格记录了关于文件的一些信息。该表的键是文件的哈希值。因此,实际上不可能添加重复项(但是,但,哈希冲突)。
字段实际上在远程键模型字段上渲染一个文件表单字段。存储后端返回哈希值作为文件名。当给定这样的哈希值时,它可以返回文件对象。
项目详情
关闭
django-dedupe-backend-0.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ace4a0836a5c3433656b9c2f43e30b232f9e9fc8e6a8fba0005dc04f4fce444 |
|
MD5 | 79a7b262df4d57e76f378ee720c095d2 |
|
BLAKE2b-256 | 983de63b310aed473b0ececebe826699755b4fa008b87cc0406bc3fe3041f133 |