Golang S3上传返回下载链接

问题描述 投票:0回答:1

有人可以告诉我我在这里做错了什么吗?这看起来很简单,但我返回的链接是下载链接,而不是内联查看链接。我到处寻找相同的答案:设置内容类型。我这样做了,结果还是一样。我不确定它是否会改变任何东西,但我通过 Heroku 使用 MinIO S3,这显然与 S3 兼容。

func UploadImageToS3(file []byte, fileName string, contentType string) (string, error) {
    bucket := aws.String(config.RetrieveEnv("S3_BUCKET"))
    key := aws.String(fmt.Sprintf("images/%s", fileName))

    // create a new session
    s3Config := &aws.Config{
        Credentials:      credentials.NewStaticCredentials(config.RetrieveEnv("S3_ACCESS_KEY"), config.RetrieveEnv("S3_SECRET_KEY"), ""),
        Endpoint:         aws.String(config.RetrieveEnv("S3_ENDPOINT")),
        Region:           aws.String(config.RetrieveEnv("S3_REGION")),
        DisableSSL:       aws.Bool(false),
        S3ForcePathStyle: aws.Bool(true),
    }

    newSession, err := session.NewSession(s3Config)
    if err != nil {
        return "", err
    }

    s3Client := s3.New(newSession)

    _, err = s3Client.PutObject(&s3.PutObjectInput{
        Bucket:             bucket,
        Key:                key,
        Body:               aws.ReadSeekCloser(bytes.NewReader(file)),
        ContentDisposition: aws.String(fmt.Sprintf("inline; filename=%s", fileName)),
        ContentType:        aws.String(contentType),
        ACL:                aws.String("public-read"),
    })
    if err != nil {
        return "", err
    }

    return fmt.Sprintf("https://%s/%s/%s", config.RetrieveEnv("S3_ENDPOINT"), *bucket, *key), nil
}
go amazon-s3
1个回答
0
投票

我就是这样做的

    req, _ := d.s3Client.GetObjectRequest(
        &s3.GetObjectInput{
            Bucket:                     aws.String(d.bucket),
            Key:                        aws.String(clPath),
            ResponseContentDisposition: aws.String("inline; filename=\"" + fileName + "\""),
            ResponseContentType:        aws.String(contentType),
        },
    )

    err := req.Build()
    if err != nil {
        return "", fmt.Errorf("failed to build get obj request: %w", err)
    }

    return req.HTTPRequest.URL.String(), nil

这段代码会生成这样的url

https://host/bucket/path?response-content-disposition=inline%3B+filename%3D"128x128.jpg"&response-content-type=image%2Fjpeg
© www.soinside.com 2019 - 2024. All rights reserved.