0

我正在尝试在 Django 中使用 ImageField 上传文件。我想在上传之前对这个 img 进行散列(使用 ImageHash),并使用散列文件名保存图像。下面是我的代码,你能帮我解决这个问题吗?

模型.py

 from utils import hash_image
 ...
 class: Subject(models.Model):
     photo = models.ImageField(upload_to=hash_image)
 ...

实用程序

    def hash_image(instance, filename):
        instance.file.open()
        ext = os.path.splitext(filename)[1]
        image_hash = ''
        image_hash = str(imagehash.average_hash(instance.file)) + '.' + ext
        return image_hash

错误:

line 34, in hash_image
        instance.file.open()
    AttributeError: 'Subject' object has no attribute 'file'
4

1 回答 1

1

你基本上需要这样东西。并解决您的错误:您的文件instance.photo不是instance.file.

但我不确定它是否可以与 imagehash 一起使用,因为UploadedFile不是类似文件的对象。特别是Image.Open要求对象实现seek(),而 UploadedFile 不这样做。我没有看到在这里构造一个 image 对象的方法 imagehash 将能够使用,但也许其他人可以。

于 2020-07-15T12:57:51.370 回答