使用 django 在上传服务器时使用唯一文件名重命名照片的最佳方法是什么?我想确保每个名称只使用一次。是否有可以使用 GUID 执行此操作的任何 pinax 应用程序?
原文由 zjm1126 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 django 在上传服务器时使用唯一文件名重命名照片的最佳方法是什么?我想确保每个名称只使用一次。是否有可以使用 GUID 执行此操作的任何 pinax 应用程序?
原文由 zjm1126 发布,翻译遵循 CC BY-SA 4.0 许可协议
更好的方法是在 helpers.py 中使用通用类。这样您就可以在您的应用程序中重复使用随机文件生成器。
在你的 helpers.py 中:
import os
import uuid
from django.utils.deconstruct import deconstructible
@deconstructible
class RandomFileName(object):
def __init__(self, path):
self.path = os.path.join(path, "%s%s")
def __call__(self, _, filename):
# @note It's up to the validators to check if it's the correct file type in name or if one even exist.
extension = os.path.splitext(filename)[1]
return self.path % (uuid.uuid4(), extension)
然后在你的模型中导入辅助类:
from mymodule.helpers import RandomFileName
然后使用它:
logo = models.ImageField(upload_to=RandomFileName('logos'))
参考: https ://coderwall.com/p/hfgoiw/give-imagefield-uploads-a-unique-name-to-avoid-file-overwrites
原文由 Raptor 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
使用uuid。要将其绑定到您的模型中,请参阅 FileField upload_to 的 Django 文档。
例如在您的 models.py 中定义以下函数:
然后,在定义 FileField/ImageField 时,将
get_file_path
指定为upload_to
值。