使用boto3从s3下载时,使用文件名作为文件名

时间:2019-05-20 10:36:18

标签: python django amazon-s3 boto3

我正在使用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仅链接到不正确/最新的文件。这就是为什么我更喜欢使用唯一的哈希。

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

2 个答案:

答案 0 :(得分:2)

将此键值添加到您的Params

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

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

答案 1 :(得分:0)

@Alexa,

您将需要在Key中传递文件名,而不是随机散列

例如

url = client.generate_presigned_url(
       ClientMethod = 'get_object',
       Params = {
          'Bucket': 'bucketname',
          'key': 'test.pdf'
      }

   )