Я относительно новичок в 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 и все еще использовать мой канал?Любые советы высоко ценится.Спасибо!