Django在文件名中添加随机字符

20jt8wwn  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(112)

我想上传图片,如果文件存在,在不改变文件名的情况下覆盖它。它已经可以覆盖文件,但django总是在文件名的末尾添加随机字符。我如何用相同的文件名覆盖?这里是我的代码。

foto_content_url = models.ImageField(null=True, blank=True, upload_to=foto_path)

个字符

qqrboqgw

qqrboqgw1#

我如何用相同的文件名覆盖?
请不要这样做。这样做有一个很好的理由:你不能提前知道其他模型对象是否引用了(旧的)文件。如果你用新的内容覆盖它,那么所有引用旧文件的记录都会引用新文件。
也许现在,这种情况是不可能的,或者是非常不可能的,但是随着应用程序的增长,最终可能会引入引用同一文件的FileField s或ImageField s的其他模型。这也是一个安全漏洞:如果某人将上载新文档并且某人有权访问旧文档,则他们现在有权访问新文档,这可能不是预期的效果。
如果你真的想这样做,你可以检查文件是否已经存在,并在这种情况下删除它:

import os
import os.path

from django.conf import settings

# bad idea
def foto_path(instance, filename):
    filename = f'/{filename}.jpg'
    try:
        os.remove(os.path.join(settings.MEDIA_ROOT, filename))
    except FileNotFoundError:
        pass
    return filename

字符串

相关问题