Виходячи з результатів пошуку, схоже, що використання прямого читача, наприклад Go `tar` reader, може бути складним під час завантаження великих файлів на Amazon S3 за допомогою AWS SDK для Go.
Основні моменти:
1. Проблеми з керуванням пам’яттю: засіб завантаження S3 AWS SDK для Go виділяє та заповнює буфери фрагментів для всього файлу перед їх завантаженням. Це може призвести до того, що процесу не вистачає пам’яті під час завантаження великих файлів за допомогою програми для читання, яка не підтримує функції `Seek` або `ReadAt`, як-от програма для читання Go `tar`.
2. Intelligent Chunking: проблема GitHub #1104 передбачає, що SDK можна покращити, щоб використовувати більш інтелектуальне поділ, коли робота з читачами, які не підтримують `Seek` і `ReadAt`. Це допоможе краще керувати використанням пам’яті під час завантаження великих файлів.
3. Потокове та багатокомпонентне завантаження: AWS SDK для Go підтримує потокове та багатокомпонентне завантаження, що може допомогти керувати використанням пам’яті під час завантаження великих файлів. Однак ці функції можуть працювати не так добре з пристроєм для читання лише передніх даних.
4. Альтернативні рішення: результати пошуку пропонують використовувати Minio SDK або Google CDK, які можуть мати кращу підтримку потокового передавання великих файлів на S3. Крім того, проект aws-s3-reader-seeker надає спеціальну реалізацію читача, яка може обробляти великі об’єкти S3 більше ефективно.
Підсумовуючи, можна сказати, що для завантаження великих файлів на S3 за допомогою AWS SDK для Go можна використовувати лише прямий зчитувач, як-от зчитувач Go `tar`, але це може бути не найефективнішим чи дружнім до пам’яті підходом. У таких випадках кращим варіантом може бути розгляд альтернативних рішень або використання функцій потокової передачі SDK і багатокомпонентного завантаження.
цитати:[1] https://github.com/aws/aws-sdk-go/issues/1104
[2] https://github.com/nikolaydubina/aws-s3-reader/blob/master/aws_s3_reader_seeker.go
[3] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_to_s3_using_go/
[4] https://www.linkedin.com/pulse/golang-uploading-files-aws-s3-bucket-using-pre-signed-tiago-melo
[5] https://pkg.go.dev/github.com/SnellerInc/sneller/aws/s3