django – sorl-thumbnail不会删除缩略图
在覆盖文件时遇到SORL缩略图问题并删除缩略图文件或刷新缩略图.场景是我有一个文件,每个条目总是相同但可以覆盖.上传新文件并覆盖旧文件时,需要重新创建缩略图.
这是在模型表单级别,所以我使用低级API生成大拇指. 尝试过使用: from sorl.thumbnail import delete delete(filename) 但是没有成功,缩略图永远不会被删除或覆盖. 我甚至尝试过: from sorl.thumbnail.images import ImageFile from sorl.thumbnail import default image_file = ImageFile(filename) default.kvstore.delete_thumbnails(image_file) 再次没有成功. 请帮忙! 更新: 我通过创建备用ThumbnailBackend和新的_get_thumbnail_filename方法找到了解决方法.新方法使用文件的SHA-1哈希来始终具有特定于当前文件的缩略图. 这是可能遇到类似场景的其他任何人的后端. class HashThumbnailBackend(ThumbnailBackend): def _get_thumbnail_filename(self,source,geometry_string,options): """ Computes the destination filename. """ import hashlib # hash object hash = hashlib.sha1() # open file and read it in as chunks to save memory f = source.storage.open(u'%s' % source,'rb') while True: chunk = f.read(128) if not chunk: break hash.update(hashlib.sha1(chunk).hexdigest()) # close file f.close() hash.update(geometry_string) hash.update(serialize(options)) key = hash.hexdigest() # make some subdirs path = '%s/%s/%s' % (key[:2],key[2:4],key) return '%s%s.%s' % (settings.THUMBNAIL_PREFIX,path,self.extensions[options['format']]) 解决方法
它有点难以解释所以我做了这个很棒的表.下面列出了第一列的命令,其他列标记了它是否使用X删除.原始文件是原始文件,缩略图是原始缩略图,KV表示键值存储引用.
| Command | Original | Thumbnails | KV Original | KV Thumbnails | | #1 | X | X | X | X | | #2 | | X | | X | | #3 | | X | X | X | > sorl.thumbnail.delete(文件名) 据我所知,你真的想做#3.现在,你的问题…猜测是文件名不引用相对于MEDIA_ROOT的文件名(如果你使用另一个存储后端,情况会类似).但是我想我需要知道你在做什么除了这个以获得更好的图片,注意ImageFields和FileFields不会覆盖,还要注意django改变了1.2.5中的删除行为,请参阅发行说明. 更新:阅读此内容的任何人都应该注意,上面生成缩略图文件名的方式效率非常低,如果您关心性能,请不要使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |