func (client *s3client) UploadFile(bucketName string, remotePath string, localPath string, options UploadFileOptions) (string, error) { uploader := s3manager.NewUploader(client.session) stat, err := os.Stat(localPath) if err != nil { return "", err } localFile, err := os.Open(localPath) if err != nil { return "", err } defer localFile.Close() progress := client.newProgressBar(stat.Size()) progress.Start() defer progress.Finish() uploadInput := s3manager.UploadInput{ Bucket: aws.String(bucketName), Key: aws.String(remotePath), Body: progressSeekReaderAt{localFile, progress}, ACL: aws.String(options.Acl), } if options.ServerSideEncryption != "" { uploadInput.ServerSideEncryption = aws.String(options.ServerSideEncryption) } if options.KmsKeyId != "" { uploadInput.SSEKMSKeyId = aws.String(options.KmsKeyId) } if options.ContentType != "" { uploadInput.ContentType = aws.String(options.ContentType) } uploadOutput, err := uploader.Upload(&uploadInput) if err != nil { return "", err } if uploadOutput.VersionID != nil { return *uploadOutput.VersionID, nil } return "", nil }