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

Python 使用boto3从s3下载时,使用文件名作为文件名,python,django,amazon-s3,boto3,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\u presigned\u url url = client.generat

我正在使用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\u presigned\u url

   url = client.generate_presigned_url(
       ClientMethod = 'get_object',
       Params = {
          'Bucket': 'bucketname',
          'key': <randomhash>
      }

   )
url=client.generate\u presigned\u url(
ClientMethod='get_object',
参数={
“Bucket”:“bucketname”,
“钥匙”:
}
)
当我在链接上下载文件时,它是以密钥命名的,这是一个随机唯一的散列-没有扩展名-我想给它一个特定的文件名和扩展名。我怎么做

编辑:我知道我可以使用文件名作为密钥,但这种方法的问题是,如果用户上传类似的文件名,url将只链接到不正确的/最近的文件。这就是为什么我更喜欢使用唯一的散列

使用唯一散列的唯一缺点是,用于下载的文件名会变成一些长散列,而不是上载时提供的文件名

@Alexa

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

e、 g


将此键值添加到
参数中

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

这应该设置下载响应的内容处置头,以便设置文件名

我希望用户能够上载具有相同名称的文件,这就是我使用哈希的原因,但我不希望将哈希用作文件名。上载文件的代码具有一个名为“test.pdf”的常量名称。所以你可以下载对象名为'test.pdf'的文件,也可以通过散列下载。嘿,伙计们,我已经更新了我的问题-也许现在你可以更清楚地看到我的问题了。谢谢你们的帮助。
'ResponseContentDisposition': f"attachment; filename = {filename}"