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']])