func (self *S3Filesystem) Create(src File) error { var fullpath string if self.path == "" || strings.HasSuffix(self.path, "/") { fullpath = filepath.Join(self.path, src.Relative()) } else { fullpath = self.path } input := s3manager.UploadInput{ ACL: aws.String(acl), Bucket: aws.String(self.bucket), Key: aws.String(fullpath), } switch t := src.(type) { case *S3File: // special case for S3File to preserve header information getObjectInput := s3.GetObjectInput{ Bucket: aws.String(t.bucket), Key: t.object.Key, } output, err := self.conn.GetObject(&getObjectInput) if err != nil { return err } defer output.Body.Close() input.Body = output.Body // transfer existing headers across input.ContentType = output.ContentType // input.LastModified = output.LastModified input.StorageClass = output.StorageClass default: reader, err := src.Reader() if err != nil { return err } input.Body = reader defer reader.Close() input.ContentType = aws.String(guessMimeType(src.Relative())) } u := s3manager.NewUploaderWithClient(self.conn) _, err := u.Upload(&input) return err }