123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package main
- import (
- "crypto/md5"
- "errors"
- "fmt"
- "io"
- "log"
- "os"
- "github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/aws/awserr"
- "github.com/aws/aws-sdk-go/aws/credentials"
- "github.com/aws/aws-sdk-go/aws/session"
- "github.com/aws/aws-sdk-go/service/s3"
- )
- func main() {
- bucketName := "photolist"
- bucket := aws.String(bucketName)
- s3Config := &aws.Config{
- Credentials: credentials.NewStaticCredentials("access_123", "secret_123", ""),
- Endpoint: aws.String("http://127.0.0.1:9000"),
- Region: aws.String("us-east-1"),
- DisableSSL: aws.Bool(true),
- S3ForcePathStyle: aws.Bool(true),
- }
- newSession := session.New(s3Config)
- s3Client := s3.New(newSession)
- input := &s3.ListBucketsInput{}
- buckets, err := s3Client.ListBuckets(input)
- if err != nil {
- log.Fatalln("ListBuckets err:", err)
- }
- fmt.Println("Existing buckets:")
- for _, bucket := range buckets.Buckets {
- fmt.Println(bucket)
- }
- _, err = s3Client.CreateBucket(&s3.CreateBucketInput{
- Bucket: bucket,
- })
- if err != nil {
- var awsErr awserr.Error
- if errors.As(err, &awsErr) && awsErr.Code() == "BucketAlreadyOwnedByYou" {
- // log.Printf("%s already exists\n", bucketName)
- } else {
- log.Fatalln("cant create bucker", bucketName, err)
- }
- }
- objectName := "building_1.jpg"
- contentType := "image/jpeg"
- file, err := os.Open("./building_1.jpg")
- if err != nil {
- log.Fatalln("cant open file:", err)
- }
- res, err := s3Client.PutObject(&s3.PutObjectInput{
- Body: file,
- Bucket: bucket,
- Key: aws.String(objectName),
- ContentType: aws.String(contentType),
- })
- if err != nil {
- log.Fatalln("PutObject err:", err)
- }
- log.Printf("Successfully uploaded %s, res %d\n", objectName, res)
- result, err := s3Client.GetObject(&s3.GetObjectInput{
- Bucket: bucket,
- Key: aws.String(objectName),
- })
- if err != nil {
- log.Fatalln("GetObject ewr:", err)
- }
- defer result.Body.Close()
- hasher := md5.New()
- io.Copy(hasher, result.Body)
- log.Printf("download file with md5sum: %x\n", hasher.Sum(nil))
- // -----
- return
- policy := `{
- "Version":"2012-10-17",
- "Statement":[
- {
- "Action":["s3:GetObject"],
- "Effect":"Allow",
- "Principal":{"AWS":["*"]},
- "Resource":["arn:aws:s3:::` + bucketName + `/*"],
- "Sid":""
- }
- ]
- }`
- _, err = s3Client.PutBucketPolicy(&s3.PutBucketPolicyInput{
- Bucket: bucket,
- Policy: aws.String(policy),
- })
- if err != nil {
- log.Fatalln("PutBucketPolicy err", err)
- }
- }
- func stuff() {
- // downloader := s3manager.NewDownloader(newSession)
- // numBytes, err := downloader.Download(file,
- // &s3.GetObjectInput{
- // Bucket: bucket,
- // Key: aws.String(objectName),
- // })
- // if err != nil {
- // fmt.Println("Failed to download file", err)
- // return
- // }
- // fmt.Println("Downloaded file", file.Name(), numBytes, "bytes")
- // file.Seek(0, io.SeekStart)
- // objectName = "2_" + objectName
- // res, err = s3Client.PutObject(&s3.PutObjectInput{
- // Body: file,
- // Bucket: bucket,
- // Key: aws.String(objectName),
- // ContentType: aws.String(contentType),
- // })
- // if err != nil {
- // log.Fatalln("PutObject err:", err)
- // }
- // log.Printf("Successfully uploaded %s, res %d\n", objectName, res)
- // result, err := s3Client.GetBucketPolicy(&s3.GetBucketPolicyInput{
- // Bucket: bucket,
- // })
- // fmt.Println(result, err)
- }
|