gpt4 book ai didi

django - sorl-thumbnail 不会删除缩略图

转载 作者:行者123 更新时间:2023-12-01 06:56:42 24 4
gpt4 key购买 nike

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

最佳答案

有点难以解释,所以我做了这张很棒的 table 。下面列出了第一列的命令,其他列使用 X 标记是否删除。原始文件是原始文件,缩略图是原始文件的缩略图,KV 表示键值存储引用。

| Command | Original | Thumbnails | KV Original | KV Thumbnails |
| #1 | X | X | X | X |
| #2 | | X | | X |
| #3 | | X | X | X |
  • sorl.thumbnail.delete(filename)
  • sorl.thumbnail.default.kvstore.delete_thumbnails(image_file)
  • sorl.thumbnail.delete(filename, delete_file=False)

  • 据我了解,您确实想做#3。现在,你的问题...猜测是 filename不引用相对于 MEDIA_ROOT 的文件名(如果您使用另一个存储后端,情况会类似)。但我想我需要知道除了这个之外你在做什么以获得更好的图片,请注意 ImageFields 和 FileFields 不会覆盖,还要注意 django 在 1.2.5 中更改了删除行为,请参阅发行说明。

    更新:
    任何阅读本文的人都应该注意,上述生成缩略图文件名的方法是 效率极低 ,如果您关心性能,请不要使用。

    关于django - sorl-thumbnail 不会删除缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072234/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com