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

时间:2018-12-15 01:22:49

标签: django amazon-web-services django-admin aws-api-gateway

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

我一直在环顾四周,但找不到解决问题的方法。我在venv本地使用相同的图像,它们可以正常工作。我在具有相同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

枕头== 5.3.0

编辑:

这是AWS API Gateway的背后,如果有人自己遇到此问题,我的答案/解决方案如下。

2 个答案:

答案 0 :(得分:1)

我昨天解决了这个!代码本身或程序包没有任何问题。

我忘记提及的一件事是它位于API网关后面,因此我需要对其进行修改以接受“ multipart / form-data”。

答案 1 :(得分:0)

遇到相同/相似的问题,此问题已解决:

  1. 在二进制媒体类型下将multipart/form-data添加到API网关设置
  2. 在代理“方法请求”中的“ HTTP请求标头”中添加“接受”和“内容类型”
  3. 重新部署API