【问题标题】:PNG image not uploading correctly to AWS S3 with Python and boto3PNG 图像未使用 Python 和 boto3 正确上传到 AWS S3
【发布时间】:2023-03-30 20:16:01
【问题描述】:

我正在尝试创建一个允许将图片上传到我的 S3 存储桶的端点,上传 PNG 图像时一切似乎都正常工作(JPEG 图像不起作用,但这是另一个问题),但是如果我尝试在浏览器中可视化上传的图像,它只是显示为一个黑色的页面,中间有一个灰色的小方块。如果我检查上传文件的元数据,S3的Content-Type正确设置为image/png,所以我不知道会发生什么。

我将 base64 图像作为多部分表单数据传递,然后用它解码

for part in multipart_data.parts:
    file = base64.b64encode(part.content).decode()

之后我使用 mimetypes guess_all_extensions() 函数来获取文件的扩展名。我的上传代码如下所示:

s3_client = boto3.client("s3")
default_bucket = "some_bucket"
        try:
            s3_client.put_object(
                Body=file,
                Bucket=default_bucket,
                Key=file_key,
                ContentType=content_type
            )
       except botocore.exceptions.ClientError as error:
            print(f"error: {error}")

从 s3 管理控制台打开的图像如下所示: 1

【问题讨论】:

  • 您是否检查了浏览器中的开发者控制台中的错误消息?
  • 是的,我没有看到任何错误消息,我正在使用无服务器并且请求的状态是 200。图像已正确上传,似乎与格式或类似的东西。
  • 如果您通过AWS控制台下载文件,即不要点击链接在浏览器中打开图片,而是点击下载按钮。下载到本地后,可以用图片查看器打开吗?

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

更新!经过多次尝试,我发现我必须将 multipart.part 作为 put_object() 函数上的文件而不是解码的 base64 字符串传递。这样,一切都按预期进行。

【讨论】:

  • 这里的 mulitpart_data 是什么。我正在尝试从反应上传图像,它被保存但只显示黑色背景
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多