python - 使用 boto3 从 s3 下载时使用文件名作为文件名
问题描述
我正在使用 boto3 上传文件,如下所示:
client = boto3.client('s3',
aws_access_key_id = id,
aws_secret_access_key = key
client.upload_file('tmp/test.pdf', 'bucketname', 'test.pdf')
然后我使用生成一个下载链接generate_presigned_url
url = client.generate_presigned_url(
ClientMethod = 'get_object',
Params = {
'Bucket': 'bucketname',
'key': <randomhash>
}
)
当我在链接上下载文件时,它以随机唯一哈希的密钥命名 - 没有扩展名 - 我想给它一个带有扩展名的特定文件名。我该怎么做?
编辑:我知道我可以使用文件名作为密钥,但我对这种方法的问题是,如果用户上传类似的文件名,则 url 将仅链接到不正确/最新的文件。这就是我更喜欢使用唯一哈希的原因。
使用唯一哈希的唯一缺点是我的下载文件名变成了一些长哈希,而不是我在上传时给它的文件名。
解决方案
将此键值添加到您的Params
:
'ResponseContentDisposition': f"attachment; filename = {filename}"
这应该设置下载响应的 Content-Disposition 标头,以便设置文件名。
推荐阅读
- mysql - XAMPP 上的 MySQL 突然意外关闭
- dask - Dask-ml ParallelPostFit 未使用分布式并导致本地计算机上的内存错误
- javascript - 如何将 Three.js EffectComposer 添加到 8th Wall
- c# - 如何从 appsettings.json 中读取用于 Asp.net 核心健康检查的 url?
- linux - 如何在类似 Ubuntu 的系统 (Kubuntu) 上安装和配置 Docker
- javascript - 寻找更快的功能以在特定单元格上添加注释
- python - python, kivy, geopy, buildozer
- android - 如何在 localMaven() 上成功发布 KMM 库以供 android 项目使用?
- javascript - React - 如何使用 UseEffect 中的 useState 更新对象数组中的特定字段
- python-3.6 - 无法通过在 python 中使用 rpyc 访问客户端功能