SORL Thumbnail 出现问题并在文件被覆盖时删除缩略图文件或刷新缩略图。场景是我有一个文件,每个条目总是相同但可以被覆盖。上传新文件并覆盖旧文件时需要重新创建缩略图。
这是在模型 + 表单级别,所以我使用低级 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']])