Django管理界面的ImageField:上传有效图像。您上传的文件不是图像或已损坏。

7

错误信息:"上传有效的图像。您上传的文件不是图像或已损坏的图像。"

我一直在寻找解决问题的方法。我将同样的图像文件用于本地环境和具有相同 Pillow 库和依赖项的 Docker 容器中,它们都可以正常工作。

我有一个 Django 的 ImageField 字段,并且有一个简单的管理表单。

我可以将图像上传到 S3 进行存储。我已经拉取了我们服务器上使用的 Docker 容器并在本地运行,但是我无法获取该错误信息。我以前从未遇到过图片上传时出现此错误,因此我不确定为什么会发生这种情况。

# models.py
@deconstructible
class RandomFileName(object):

    def __init__(self, path):
        self.path = path

    def __call__(self, instance, filename):
        ext = filename.split('.')[-1]
        filename = '{}.{}'.format(uuid.uuid4().hex, ext)

        return os.path.join(self.path, filename)

class MyModel(models.Model):
    name = models.CharField(max_length=50)
    avatar = models.ImageField(
        upload_to=RandomFileName('avatars')
    )
    ...


# admin.py
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = (
        'name',
        ...
    )
    fieldsets = (
        (None, {'fields': (
            'name',
            'avatar',
        )}),
    )
    ...

依赖:

Django==2.0.3

Pillow==5.3.0

编辑:

这个在AWS API Gateway后面,如果有人遇到这个问题,我的答案/解决方案如下。

2个回答

3

我昨天已经解决了这个问题!代码本身和包都没有问题。

有一件事我忘了提,就是这是在API网关后面的,所以我需要修改它来接受“multipart/form-data”格式。


3

遇到了相同/类似的问题,以下步骤解决:

  1. 在API Gateway设置中添加multipart/form-data到二进制媒体类型
  2. 在代理“Method Request”中,添加“Accept”和“Content-Type”到“HTTP请求标头”
  3. 重新部署API

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接