Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kan jag använda en framåtriktad läsare för uppladdning av stora filer till S3 i Golang


Kan jag använda en framåtriktad läsare för uppladdning av stora filer till S3 i Golang


Baserat på sökresultaten verkar det som att det kan vara svårt att använda en läsare som endast är framåt, såsom Go `tar`-läsaren, när du laddar upp stora filer till Amazon S3 med AWS SDK för Go.

De viktigaste punkterna är:

1. Problem med minneshantering: AWS SDK för Gos S3-uppladdningsverktyg tilldelar och fyller buffertar för hela filen innan de laddas upp. Detta kan göra att processen tar slut på minne när du laddar upp stora filer med en läsare som inte stöder "Seek" eller "ReadAt", som Go "tar"-läsaren.

2. Intelligent Chunking: GitHub-problemet #1104 föreslår att SDK:n skulle kunna förbättras för att använda mer intelligent chunking när hantera läsare som inte stöder `Seek` och `ReadAt`. Detta skulle hjälpa till att hantera minnesanvändningen bättre under uppladdningar av stora filer.

3. Streaming och multipart-uppladdningar: AWS SDK for Go stöder streaming och multipart-uppladdningar, vilket kan hjälpa till att hantera minnesanvändning under stora filuppladdningar. Men de här funktionerna kanske inte fungerar lika bra med en läsare som bara är framåtriktad.

4. Alternativa lösningar: Sökresultaten föreslår att du använder Minio SDK eller Google CDK, som kan ha bättre stöd för att strömma stora filer till S3. Dessutom tillhandahåller projektet aws-s3-reader-seeker en anpassad läsarimplementering som kan hantera stora S3-objekt mer effektivt.

Sammanfattningsvis, även om det är möjligt att använda en framåtriktad läsare som Go `tar`-läsaren för att ladda upp stora filer till S3 med AWS SDK för Go, kanske det inte är den mest effektiva eller minnesvänliga metoden. Att överväga alternativa lösningar eller använda SDK:ns strömmande och flerdelade uppladdningsfunktioner kan vara ett bättre alternativ i sådana fall.

Citat:
[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