AWS SDK для Go - подписанный URL-адрес при загрузке - PullRequest
0 голосов
/ 06 февраля 2019

Я относительно новичок в Go и пытаюсь загрузить файл в корзину S3, используя aws-sdk-go.Мне нужно прочитать файл из внешнего источника, передать его загрузчику и вернуть подписанный 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.Я не могу найти вариант для получения подписанного URL при использовании UploadInput и Upload.Я могу получить подписанный URL, используя PutObjectInput, но структура PutObjectInput не принимает мой io.PipeReader и вместо этого ожидает bytes.Reader.Как я могу получить подписанный URL и все еще использовать мой канал?Любые советы высоко ценится.Спасибо!

...