package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3/s3manager" "os" ) func main() { if len(os.Args) != 3 { exitErrorf("bucket and file name required\nUsage: %s bucket_name filename", os.Args[0]) } bucket := os.Args[1] filename := os.Args[2] file, err := os.Open(filename) if err != nil { exitErrorf("Unable to open file %q, %v", filename, err) } defer file.Close() defaultResolver := endpoints.DefaultResolver() s3CustResolverFn := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) { if service == "s3" { return endpoints.ResolvedEndpoint{ URL: "http://127.0.0.1:8000", //Variable substituing endpoint-url }, nil } return defaultResolver.EndpointFor(service, region, optFns...) } sess := session.Must(session.NewSessionWithOptions(session.Options{ Config: aws.Config{ Region: aws.String("default"), Credentials: credentials.NewStaticCredentials("0555b35654ad1656d804", "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==", ""), S3ForcePathStyle: aws.Bool(true), EndpointResolver: endpoints.ResolverFunc(s3CustResolverFn), }, })) uploader := s3manager.NewUploader(sess) // Upload the file's body to S3 bucket as an object with the key being the // same as the filename. _, err = uploader.Upload(&s3manager.UploadInput{ Bucket: aws.String(bucket), Key: aws.String(filename), Body: file, }) if err != nil { exitErrorf("Unable to upload %q to %q, %v", filename, bucket, err) } fmt.Printf("Successfully uploaded %q to %q\n", filename, bucket) } func exitErrorf(msg string, args ...interface{}) { fmt.Fprintf(os.Stderr, msg+"\n", args...) os.Exit(1) }