首页 > 解决方案 > Boto3 ContentDisposition 内联不起作用

问题描述

我在我的 django-restfrmework 项目中使用 boto3 将图像上传到亚马逊。但我面临问题。每当我在浏览器中放置 url 时,我的图像就会自动开始下载。我设置了属性ContentDisposition='inline',但仍然是我的图像下载。这有什么诀窍吗?

session = boto3.Session(
                    aws_access_key_id=YOUR_ACCESS_KEY,
                    aws_secret_access_key=YOUR_SECRET_KEY,
                    region_name=YOUR_AWS_REGION
                )
                s3 = session.resource('s3')
                bucket = s3.Bucket(AWS_BUCKET_NAME)

bucket.put_object(Key=image_name, Body=file, ACL='public-read', ContentDisposition='inline')

标签: amazon-s3django-rest-frameworkboto3

解决方案


当您查看 s3 存储桶中上传的图像文件的属性,并转到其中的 MetaData 时,您会看到两个键,一个是 ContentDisposition:inline,另一个是 Content-Type: binary/octet-stream。因此,正在下载您的文件而不是内联视图,因为每当缺少 ContentType 时,它​​默认设置为 s3 存储桶中的二进制/八位字节流,这是一种可下载的文件类型。因此,您只需将其更正为图像/jpeg。

代替:

bucket.put_object(Key=image_name, Body=file, ACL='public-read', ContentDisposition='inline')

至:

bucket.put_object(Key=image_name, Body=file, ACL='public-read', ContentDisposition='inline', ContentType='image/jpeg')

我希望这能正常工作。


推荐阅读