0
我试图更改从S3下载的文件的名称,但它始终将存储桶密钥作为文件名取而代之。下载具有与存储桶密钥不同的文件名的S3文件
我使用这个函数来获得一个签名的URL从我的S3存储桶下载东西。
func GetFileLink(url, filename string) (string, error) {
svc := s3.New(some params)
params := &s3.GetObjectInput{
Bucket: aws.String(a bucket name),
Key: aws.String(key),
}
req, _ := svc.GetObjectRequest(params)
req.SignedHeaderVals = make(map[string][]string)
req.SignedHeaderVals.Add("Content-Disposition", "filename=the filename I want")
str, err := req.Presign(15 * time.Minute)
if err != nil {
global.Log("[AWS GET LINK]:", params, err)
}
return str, err
}
而且我使用这在我的HTML文件,下载的文件与另一名:
<a href="Link given by the function" download="the filename I want">Download the file.</a>
但我不断收到命名为斗密钥的文件。如何更改正在下载的文件的名称?
当我意识到'req.SignedHeaderVals.Add'不是正确的解决方案时,我删除了注释。您正在添加与标题相关的内容 - 而不是查询字符串参数 - 这就是“响应内容处置”的含义。 'ResponseContentDisposition'需要作为参数传递给['GetObjectInput'](https://github.com/aws/aws-sdk-go/blob/master/service/s3/api.go#L7495-L7570)。随意采取此信息并相应地修改您的答案。 –
...假设你同意。 [GetObjectInput]的文档(http://docs.aws.amazon.com/sdk-for-go/api/service/s3/#GetObjectInput)表示这会“设置响应的标题”,这可能会引起误解。 *请求S3在这个请求的响应中重写头部*会更加精确,如果这种方式看起来像是这样。 –
谢谢@ Michael-sqlbot同意并更新。 –