首页 > 解决方案 > 使用 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 将仅链接到不正确/最新的文件。这就是我更喜欢使用唯一哈希的原因。

使用唯一哈希的唯一缺点是我的下载文件名变成了一些长哈希,而不是我在上传时给它的文件名。

标签: pythondjangoamazon-s3boto3

解决方案


将此键值添加到您的Params

'ResponseContentDisposition': f"attachment; filename = {filename}"

这应该设置下载响应的 Content-Disposition 标头,以便设置文件名。


推荐阅读