Ich versuche, eine Datei von S3 herunterzuladen und diese Datei in einen anderen Bucket in S3 hochzuladen. Die Kopier-API funktioniert hier nicht, weil mir gesagt wurde, sie nicht zu benutzen.Wie gehe ich von io.ReadCloser zu io.ReadSeeker?
ein Objekt aus S3 Erste hat eine response.Body
, dass ein io.ReadCloser
ist und die Datei zu laden, nimmt die Nutzlast eine Body
, die ein io.ReadSeeker
ist.
Die einzige Möglichkeit, die ich herausfinden kann, ist durch Speichern der response.Body
in eine Datei, dann übergibt diese Datei als io.ReadSeeker
. Dies würde erfordern, die gesamte Datei zuerst auf die Festplatte zu schreiben und dann die gesamte Datei von der Festplatte zu lesen, was ziemlich falsch klingt.
Was würde Ich mag zu tun ist:
resp, _ := conn.GetObject(&s3.GetObjectInput{Key: "bla"})
conn.PutObject(&s3.PutObjectInput{Body: resp.Body}) // resp.Body is an io.ReadCloser and the field type expects an io.ReadSeeker
Frage ist, wie gehe ich von einem io.ReadCloser
zu einem io.ReadSeeker
auf die effizienteste Art und Weise möglich?
Welche spezifische API und Funktionen verwenden Sie? Ich kann nicht scheinen, die Funktionen zu finden, die Sie in dem Go S3 SDK beziehen. https://docs.aws.amazon.com/sdk-for-go/api/service/s3.html – BadZen
@BadZen Ich habe die Anrufe hinzugefügt, die ich verwenden würde. – Jeff
Es ist seltsam, dass Sie die Kopierfunktionen nicht verwenden können - dafür sind sie da. Vielleicht schubst du das zurück. Ihre einzige andere Option als das Schreiben der Datei auf die Festplatte besteht darin, dass Sie das GetObject() auf Ihrer 'io.ReadSeeker'-Suchanforderung erneut ausgeben und das Bereichsfeld so einstellen, dass es an der Position der Suche beginnt. Es ist in jeder Hinsicht eine schlechtere Lösung als die bereits falsche Schreib-auf-Festplatte. – BadZen