使用与存储区密钥不同的文件名下载S3文件

时间:2016-11-05 03:43:25

标签: html amazon-web-services go amazon-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>

但我一直得到名为bucket key的文件。如何更改正在下载的文件的名称?

1 个答案:

答案 0 :(得分:6)

根据Amazon GET Object Docs,您需要的参数实际为response-content-disposition

根据GetObjectInput文档,GetObjectInput有一个参数来设置ResponseContentDisposition值。

尝试:

params := &s3.GetObjectInput{
    Bucket: aws.String(a bucket name),
    Key:    aws.String(key),
    ResponseContentDisposition: "attachment; filename=the filename I want",
}

req, _ := svc.GetObjectRequest(params)
str, err := req.Presign(15 * time.Minute)

(注意:不需要使用SignedHeaderVals)。

感谢迈克尔对我原来的答案进行更正。