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同意並更新。 –