1package s3manager_test
2
3import (
4	"bytes"
5	"fmt"
6	"net/http"
7	"time"
8
9	"github.com/aws/aws-sdk-go/aws"
10	"github.com/aws/aws-sdk-go/aws/session"
11	"github.com/aws/aws-sdk-go/service/s3/s3manager"
12)
13
14// ExampleNewUploader_overrideReadSeekerProvider gives an example
15// on a custom ReadSeekerWriteToProvider can be provided to Uploader
16// to define how parts will be buffered in memory.
17func ExampleNewUploader_overrideReadSeekerProvider() {
18	sess := session.Must(session.NewSession())
19
20	uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
21		// Define a strategy that will buffer 25 MiB in memory
22		u.BufferProvider = s3manager.NewBufferedReadSeekerWriteToPool(25 * 1024 * 1024)
23	})
24
25	_, err := uploader.Upload(&s3manager.UploadInput{
26		Bucket: aws.String("examplebucket"),
27		Key:    aws.String("largeobject"),
28		Body:   bytes.NewReader([]byte("large_multi_part_upload")),
29	})
30	if err != nil {
31		fmt.Println(err.Error())
32	}
33}
34
35// ExampleNewUploader_overrideTransport gives an example
36// on how to override the default HTTP transport. This can
37// be used to tune timeouts such as response headers, or
38// write / read buffer usage when writing or reading respectively
39// from the net/http transport.
40func ExampleNewUploader_overrideTransport() {
41	// Create Transport
42	tr := &http.Transport{
43		ResponseHeaderTimeout: 1 * time.Second,
44		// WriteBufferSize: 1024*1024 // Go 1.13
45		// ReadBufferSize: 1024*1024 // Go 1.13
46	}
47
48	sess := session.Must(session.NewSession(&aws.Config{
49		HTTPClient: &http.Client{Transport: tr},
50	}))
51
52	uploader := s3manager.NewUploader(sess)
53
54	_, err := uploader.Upload(&s3manager.UploadInput{
55		Bucket: aws.String("examplebucket"),
56		Key:    aws.String("largeobject"),
57		Body:   bytes.NewReader([]byte("large_multi_part_upload")),
58	})
59	if err != nil {
60		fmt.Println(err.Error())
61	}
62}
63