commit
2564f2ef4d
@ -0,0 +1,93 @@ |
||||
package s3 |
||||
|
||||
import ( |
||||
"fmt" |
||||
"log" |
||||
"os" |
||||
|
||||
"github.com/aws/aws-sdk-go/aws" |
||||
"github.com/aws/aws-sdk-go/aws/awserr" |
||||
"github.com/aws/aws-sdk-go/aws/endpoints" |
||||
"github.com/aws/aws-sdk-go/aws/session" |
||||
"github.com/aws/aws-sdk-go/service/s3" |
||||
"github.com/aws/aws-sdk-go/service/s3/s3manager" |
||||
) |
||||
|
||||
func createSession() *session.Session { |
||||
return session.Must(session.NewSession(&aws.Config{ |
||||
Region: aws.String(endpoints.UsWest2RegionID), |
||||
MaxRetries: aws.Int(3), |
||||
})) |
||||
} |
||||
|
||||
func CreateBucket(bucketName string, region string) { |
||||
sess := createSession() |
||||
svc := s3.New(sess) |
||||
input := &s3.CreateBucketInput{ |
||||
Bucket: aws.String(bucketName), |
||||
CreateBucketConfiguration: &s3.CreateBucketConfiguration{ |
||||
LocationConstraint: aws.String(region), |
||||
}, |
||||
} |
||||
|
||||
result, err := svc.CreateBucket(input) |
||||
if err != nil { |
||||
if aerr, ok := err.(awserr.Error); ok { |
||||
switch aerr.Code() { |
||||
case s3.ErrCodeBucketAlreadyExists: |
||||
fmt.Println(s3.ErrCodeBucketAlreadyExists, aerr.Error()) |
||||
case s3.ErrCodeBucketAlreadyOwnedByYou: |
||||
fmt.Println(s3.ErrCodeBucketAlreadyOwnedByYou, aerr.Error()) |
||||
default: |
||||
fmt.Println(aerr.Error()) |
||||
} |
||||
} else { |
||||
// Print the error, cast err to awserr.Error to get the Code and
|
||||
// Message from an error.
|
||||
fmt.Println(err.Error()) |
||||
} |
||||
return |
||||
} |
||||
|
||||
fmt.Println(result) |
||||
} |
||||
|
||||
func UploadFile(bucketName string, fileName string, key string) (result *s3manager.UploadOutput, err error) { |
||||
sess := createSession() |
||||
uploader := s3manager.NewUploader(sess) |
||||
|
||||
f, err := os.Open(fileName) |
||||
if err != nil { |
||||
log.Println("Failed to open file", err) |
||||
return nil, err |
||||
} |
||||
// Upload the file to S3.
|
||||
result, err = uploader.Upload(&s3manager.UploadInput{ |
||||
Bucket: aws.String(bucketName), |
||||
Key: aws.String(key), |
||||
Body: f, |
||||
}) |
||||
if err != nil { |
||||
log.Println("failed to upload file", err) |
||||
return nil, err |
||||
} |
||||
fmt.Printf("file uploaded to, %s\n", result.Location) |
||||
return result, nil |
||||
} |
||||
|
||||
func DownloadFile(bucketName string, fileName string, key string) (n int64, err error) { |
||||
sess := createSession() |
||||
|
||||
downloader := s3manager.NewDownloader(sess) |
||||
|
||||
f, err := os.Create(fileName) |
||||
if err != nil { |
||||
return |
||||
} |
||||
|
||||
n, err = downloader.Download(f, &s3.GetObjectInput{ |
||||
Bucket: aws.String(bucketName), |
||||
Key: aws.String(key), |
||||
}) |
||||
return |
||||
} |
Loading…
Reference in new issue