【问题标题】:How do I upload Pillow processed image to S3 on Django?如何在 Django 上将 Pillow 处理后的图像上传到 S3?
【发布时间】:2017-07-23 21:21:08
【问题描述】:

我正在尝试以下我编写的代码,但它抛出了一个错误。我不确定我做错了什么。任何帮助表示赞赏

def upload_img(request):
    maxsize = (1024, 1024)
    im = Image.open(request.FILES['image'])
    im.thumbnail(maxsize)
    img_name = 'test.jpg'
    s3 = boto3.client('s3')
    s3.put_object(
        Bucket=settings.AWS_S3_DEV_IMG_BUCKET,
        Key=img_name,
        Body=im.save(img_name, "JPEG"),
        ContentType='image/jpeg',
    )

错误:

'ParamValidationError: Parameter validation failed:
Invalid type for parameter Body, value: None, type: <type 'NoneType'>, valid types: <type 'str'>, <type 'bytearray'>, file-like object

【问题讨论】:

    标签: django amazon-s3 pillow


    【解决方案1】:

    Image.save() 方法不返回图像,它是saves it to disk (or buffer) and returns None。这就是为什么 boto 抱怨 NoneType 参数。

    您想将数据保存到某个临时缓冲区,然后将其传递给 boto。例如:

    buffer = io.BytesIO()
    im.save(buffer, "JPEG")
    buffer.seek(0) # rewind pointer back to start
    s3.put_object(
        Bucket=settings.AWS_S3_DEV_IMG_BUCKET,
        Key=img_name,
        Body=buffer,
        ContentType='image/jpeg',
    )
    

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 2013-03-07
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 2022-01-23
      相关资源
      最近更新 更多