(uploader *s3manager.Uploader, bucket, prefix, localPath, fpath string)
| 287 | } |
| 288 | |
| 289 | func s3UploadFile(uploader *s3manager.Uploader, bucket, prefix, localPath, fpath string) error { |
| 290 | ctx := log.WithFields(log.Fields{"localPath": localPath, "filepath": fpath}) |
| 291 | |
| 292 | rel, err := filepath.Rel(localPath, fpath) |
| 293 | if err != nil { |
| 294 | return fmt.Errorf("unable to get relative path: %v", err) |
| 295 | } |
| 296 | |
| 297 | file, err := os.Open(fpath) |
| 298 | if err != nil { |
| 299 | return err |
| 300 | } |
| 301 | |
| 302 | ctx.WithFields(log.Fields{"key": path.Join(prefix, rel)}).Info("Uploading") |
| 303 | result, err := uploader.Upload(&s3manager.UploadInput{ |
| 304 | Bucket: &bucket, |
| 305 | Key: aws.String(path.Join(prefix, rel)), // force forwarding slash path as AWS key |
| 306 | Body: file, |
| 307 | }) |
| 308 | if err != nil { |
| 309 | file.Close() |
| 310 | actualS3Path := fmt.Sprintf("s3://%s/%s/%s", bucket, prefix, rel) |
| 311 | return fmt.Errorf("error uploading %s to %s: %s", fpath, actualS3Path, err) |
| 312 | } |
| 313 | |
| 314 | // We should really check that what we uploaded is correct before removing |
| 315 | file.Close() // ignore error: close required on windows to successfully remove the file |
| 316 | if err := os.Remove(fpath); err != nil { |
| 317 | return err |
| 318 | } |
| 319 | |
| 320 | ctx.WithField("dst", result.Location).Info("Done") |
| 321 | |
| 322 | return nil |
| 323 | } |
no test coverage detected