amazon-s3 - 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')
解决方案
当您查看 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')
我希望这能正常工作。
推荐阅读
- spring - Spring Vault 集成 - 从多个路径读取秘密
- c++ - 如何停止 C++20 std::chrono zoned_time 打印 GMT-4 而不是 EST?
- excel - 如何将外部 Web 应用程序中的工作分配自动记录到 Excel Online 工作表
- android - 如何在 Android 11 上列出来自外部存储的所有 PDF
- c++ - 是否可以使用 target 从 for 循环中访问索引所给定的数组元素以外的其他数组元素?
- terraform - Terraform 认为 VCenter 中的“集群”是什么?
- vmware - 列出 ESX 主机上正在运行的命令进程
- python - 尝试设置一个命名空间时获取多个命名空间
- regex - 角度中逗号分隔字符串的正则表达式
- html - 社交图标坏了