Python 如何基于EXIF DateTime为Django中的图像分配文件名

Python 如何基于EXIF DateTime为Django中的图像分配文件名,python,django,Python,Django,我想从Django中用户上传的图像中读取EXIF信息,然后使用该EXIF信息生成文件名以将图像存储在animal_img/alfred-0012目录下,例如: 原始文件名:P1110438.JPG 拍摄日期:2012-07-22 姓名:阿尔弗雷德 预期文件名:alfred-20120722.jpg 不知何故,直到最近,这种方法才奏效,但Django一直抱怨没有找到[Errno 2]的文件,没有这样的文件或目录:“P1110438.JPG” 我在模型中用于重命名图像的代码: def img_nam

我想从Django中用户上传的图像中读取EXIF信息,然后使用该EXIF信息生成文件名以将图像存储在animal_img/alfred-0012目录下,例如:

原始文件名:P1110438.JPG

拍摄日期:2012-07-22

姓名:阿尔弗雷德

预期文件名:alfred-20120722.jpg

不知何故,直到最近,这种方法才奏效,但Django一直抱怨没有找到[Errno 2]的文件,没有这样的文件或目录:“P1110438.JPG”

我在模型中用于重命名图像的代码:

def img_namer(instance, filename):
    path = 'animal_img/%s-%04d/' % (instance.name.lower(), instance.id)
    name = instance.name.lower() + Image.open(filename)._getexif()[36867] + ".jpg"

    return os.path.join(path, name)

image = models.ImageField(
    default=None,
    blank=True,
    upload_to=img_namer,

)

我可以看到在正确保存图像文件之前尝试打开图像文件的局限性,但是这一直在工作,就像我说的,所以可能我做错了什么?感谢您的帮助

我在解决类似问题时发现了你的问题

通过将Image.openfilename替换为Image.openinstance.Image,它对我有效