适用于Go的AWS开发工具包-上载的签名URL

时间:2019-02-06 14:03:19

标签: amazon-web-services aws-sdk-go

我对Go还是比较陌生,我正尝试使用aws-sdk-go将文件上传到S3存储桶。我需要从外部来源读取文件,并将其传递给上传器,然后将签名的URL返回到其位置。

我想使用管道来发送数据,这样我就不必将其存储在任何地方,但这在尝试获取签名的URL时似乎会引起问题。这是我要上传的功能:

func (helper *AWSHelper) UploadToS3(pr io.Reader, folder string, path string) (string, error) {
sess := session.Must(session.NewSession(&aws.Config{Region: aws.String(os.Getenv("AWS_REGION"))}))
uploader := s3manager.NewUploader(sess)
key := fmt.Sprintf("/%s/%s", folder, path)

uploadInput := s3manager.UploadInput{
    Bucket:               aws.String(os.Getenv("S3Bucket")),
    Key:                  aws.String(key),
    Body:                 pr,
    ServerSideEncryption: aws.String("aws:kms"),
    SSEKMSKeyId:          aws.String(os.Getenv("KMSKeyID")),
}

result, err := uploader.Upload(&uploadInput)
if err != nil {
    errorMessage := fmt.Sprintf("aws#UploadToS3 failed to upload file: %s", err.Error())
    log.Println(errorMessage)
    return "", errors.New(errorMessage)
}

return result.Location, nil

pr是我的io.PipeReader。使用UploadInput和Upload时,无法找到获取签名URL的选项。我可以使用PutObjectInput获取签名的URL,但是PutObjectInput结构不使用io.PipeReader,而是需要一个byte.Reader。如何获得已签名的URL并仍然使用管道?任何意见是极大的赞赏。谢谢!

0 个答案:

没有答案