From 50c1bdc018653f83720830f01465cee5e2c726b3 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 4 Jun 2019 16:35:52 +0000 Subject: [PATCH] Fix S3 uploads (#178) My previous change that reworked how metadata generation worked was not correct for two reasons: * It passed the original `io.Reader` (with no bytes remaining) to `GenerateMetadata` * It did not seek back to the beginning of the temporary file after writing to it, causing any subsequent reads to return EOF. This change fixes both issues and S3 uploads now work fine. We really ought to investigate adding test coverage to our S3 backend to avoid similar recurrences. --- backends/s3/s3.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/backends/s3/s3.go b/backends/s3/s3.go index e39786a..fc2a1b0 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -122,7 +122,12 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri return m, err } - m, err = helpers.GenerateMetadata(r) + _, err = tmpDst.Seek(0, 0) + if err != nil { + return m, err + } + + m, err = helpers.GenerateMetadata(tmpDst) if err != nil { return } @@ -131,6 +136,11 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri // XXX: we may not be able to write this to AWS easily //m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, tmpDst) + _, err = tmpDst.Seek(0, 0) + if err != nil { + return m, err + } + uploader := s3manager.NewUploaderWithClient(b.svc) input := &s3manager.UploadInput{ Bucket: aws.String(b.bucket),