diff --git a/s3/public.go b/s3/public.go index a3e85a99..227c3373 100644 --- a/s3/public.go +++ b/s3/public.go @@ -142,7 +142,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err } defer source.Close() - err = storage.putFile(path, source) + err = storage.putFile(path, source, "") if err != nil { err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage)) } @@ -151,7 +151,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err } // putFile uploads file-like object to -func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) error { +func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error { params := &s3.PutObjectInput{ Bucket: aws.String(storage.bucket), @@ -165,6 +165,11 @@ func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) erro if storage.encryptionMethod != "" { params.ServerSideEncryption = aws.String(storage.encryptionMethod) } + if sourceMD5 != "" { + params.Metadata = map[string]*string{ + "Md5": aws.String(sourceMD5), + } + } _, err := storage.s3.PutObject(params) if err != nil { @@ -177,7 +182,7 @@ func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) erro return err } - return storage.putFile(strings.Replace(path, "+", " ", -1), source) + return storage.putFile(strings.Replace(path, "+", " ", -1), source, sourceMD5) } return nil } @@ -318,7 +323,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedDirectory, fileName strin } defer source.Close() - err = storage.putFile(relPath, source) + err = storage.putFile(relPath, source, sourceMD5) if err == nil { storage.pathCache[relPath] = sourceMD5 } else {