在覆盖文件时遇到SORL缩略图问题并删除缩略图文件或刷新缩略图.场景是我有一个文件,每个条目总是相同但可以覆盖.上传新文件并覆盖旧文件时,需要重新创建缩略图.
这是在模型+表单级别,所以我使用低级API生成大拇指.
尝试过使用:
from sorl.thumbnail import delete
delete(filename)
Run Code Online (Sandbox Code Playgroud)
但是没有成功,缩略图永远不会被删除或覆盖.
我甚至尝试过:
from sorl.thumbnail.images import ImageFile
from sorl.thumbnail import default
image_file = ImageFile(filename)
default.kvstore.delete_thumbnails(image_file)
Run Code Online (Sandbox Code Playgroud)
再次没有成功.
请帮忙!
我通过创建备用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() …Run Code Online (Sandbox Code Playgroud)