1// Upload Managers 2// 3// The s3manager package's Uploader provides concurrent upload of content to S3 4// by taking advantage of S3's Multipart APIs. The Uploader also supports both 5// io.Reader for streaming uploads, and will also take advantage of io.ReadSeeker 6// for optimizations if the Body satisfies that type. Once the Uploader instance 7// is created you can call Upload concurrently from multiple goroutines safely. 8// 9// // The session the S3 Uploader will use 10// sess := session.Must(session.NewSession()) 11// 12// // Create an uploader with the session and default options 13// uploader := s3manager.NewUploader(sess) 14// 15// f, err := os.Open(filename) 16// if err != nil { 17// return fmt.Errorf("failed to open file %q, %v", filename, err) 18// } 19// 20// // Upload the file to S3. 21// result, err := uploader.Upload(&s3manager.UploadInput{ 22// Bucket: aws.String(myBucket), 23// Key: aws.String(myString), 24// Body: f, 25// }) 26// if err != nil { 27// return fmt.Errorf("failed to upload file, %v", err) 28// } 29// fmt.Printf("file uploaded to, %s\n", aws.StringValue(result.Location)) 30// 31// See the s3manager package's Uploader type documentation for more information. 32// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Uploader 33// 34// Download Manager 35// 36// The s3manager package's Downloader provides concurrently downloading of Objects 37// from S3. The Downloader will write S3 Object content with an io.WriterAt. 38// Once the Downloader instance is created you can call Download concurrently from 39// multiple goroutines safely. 40// 41// // The session the S3 Downloader will use 42// sess := session.Must(session.NewSession()) 43// 44// // Create a downloader with the session and default options 45// downloader := s3manager.NewDownloader(sess) 46// 47// // Create a file to write the S3 Object contents to. 48// f, err := os.Create(filename) 49// if err != nil { 50// return fmt.Errorf("failed to create file %q, %v", filename, err) 51// } 52// 53// // Write the contents of S3 Object to the file 54// n, err := downloader.Download(f, &s3.GetObjectInput{ 55// Bucket: aws.String(myBucket), 56// Key: aws.String(myString), 57// }) 58// if err != nil { 59// return fmt.Errorf("failed to download file, %v", err) 60// } 61// fmt.Printf("file downloaded, %d bytes\n", n) 62// 63// See the s3manager package's Downloader type documentation for more information. 64// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Downloader 65// 66// Automatic URI cleaning 67// 68// Interacting with objects whose keys contain adjacent slashes (e.g. bucketname/foo//bar/objectname) 69// requires setting DisableRestProtocolURICleaning to true in the aws.Config struct 70// used by the service client. 71// 72// svc := s3.New(sess, &aws.Config{ 73// DisableRestProtocolURICleaning: aws.Bool(true), 74// }) 75// out, err := svc.GetObject(&s3.GetObjectInput { 76// Bucket: aws.String("bucketname"), 77// Key: aws.String("//foo//bar//moo"), 78// }) 79// 80// Get Bucket Region 81// 82// GetBucketRegion will attempt to get the region for a bucket using a region 83// hint to determine which AWS partition to perform the query on. Use this utility 84// to determine the region a bucket is in. 85// 86// sess := session.Must(session.NewSession()) 87// 88// bucket := "my-bucket" 89// region, err := s3manager.GetBucketRegion(ctx, sess, bucket, "us-west-2") 90// if err != nil { 91// if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "NotFound" { 92// fmt.Fprintf(os.Stderr, "unable to find bucket %s's region not found\n", bucket) 93// } 94// return err 95// } 96// fmt.Printf("Bucket %s is in %s region\n", bucket, region) 97// 98// See the s3manager package's GetBucketRegion function documentation for more information 99// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#GetBucketRegion 100// 101// S3 Crypto Client 102// 103// The s3crypto package provides the tools to upload and download encrypted 104// content from S3. The Encryption and Decryption clients can be used concurrently 105// once the client is created. 106// 107// See the s3crypto package documentation for more information. 108// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3crypto/ 109// 110package s3 111