aws.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package main
  2. import (
  3. "crypto/md5"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "log"
  8. "os"
  9. "github.com/aws/aws-sdk-go/aws"
  10. "github.com/aws/aws-sdk-go/aws/awserr"
  11. "github.com/aws/aws-sdk-go/aws/credentials"
  12. "github.com/aws/aws-sdk-go/aws/session"
  13. "github.com/aws/aws-sdk-go/service/s3"
  14. )
  15. func main() {
  16. bucketName := "photolist"
  17. bucket := aws.String(bucketName)
  18. s3Config := &aws.Config{
  19. Credentials: credentials.NewStaticCredentials("access_123", "secret_123", ""),
  20. Endpoint: aws.String("http://127.0.0.1:9000"),
  21. Region: aws.String("us-east-1"),
  22. DisableSSL: aws.Bool(true),
  23. S3ForcePathStyle: aws.Bool(true),
  24. }
  25. newSession := session.New(s3Config)
  26. s3Client := s3.New(newSession)
  27. input := &s3.ListBucketsInput{}
  28. buckets, err := s3Client.ListBuckets(input)
  29. if err != nil {
  30. log.Fatalln("ListBuckets err:", err)
  31. }
  32. fmt.Println("Existing buckets:")
  33. for _, bucket := range buckets.Buckets {
  34. fmt.Println(bucket)
  35. }
  36. _, err = s3Client.CreateBucket(&s3.CreateBucketInput{
  37. Bucket: bucket,
  38. })
  39. if err != nil {
  40. var awsErr awserr.Error
  41. if errors.As(err, &awsErr) && awsErr.Code() == "BucketAlreadyOwnedByYou" {
  42. // log.Printf("%s already exists\n", bucketName)
  43. } else {
  44. log.Fatalln("cant create bucker", bucketName, err)
  45. }
  46. }
  47. objectName := "building_1.jpg"
  48. contentType := "image/jpeg"
  49. file, err := os.Open("./building_1.jpg")
  50. if err != nil {
  51. log.Fatalln("cant open file:", err)
  52. }
  53. res, err := s3Client.PutObject(&s3.PutObjectInput{
  54. Body: file,
  55. Bucket: bucket,
  56. Key: aws.String(objectName),
  57. ContentType: aws.String(contentType),
  58. })
  59. if err != nil {
  60. log.Fatalln("PutObject err:", err)
  61. }
  62. log.Printf("Successfully uploaded %s, res %d\n", objectName, res)
  63. result, err := s3Client.GetObject(&s3.GetObjectInput{
  64. Bucket: bucket,
  65. Key: aws.String(objectName),
  66. })
  67. if err != nil {
  68. log.Fatalln("GetObject ewr:", err)
  69. }
  70. defer result.Body.Close()
  71. hasher := md5.New()
  72. io.Copy(hasher, result.Body)
  73. log.Printf("download file with md5sum: %x\n", hasher.Sum(nil))
  74. // -----
  75. return
  76. policy := `{
  77. "Version":"2012-10-17",
  78. "Statement":[
  79. {
  80. "Action":["s3:GetObject"],
  81. "Effect":"Allow",
  82. "Principal":{"AWS":["*"]},
  83. "Resource":["arn:aws:s3:::` + bucketName + `/*"],
  84. "Sid":""
  85. }
  86. ]
  87. }`
  88. _, err = s3Client.PutBucketPolicy(&s3.PutBucketPolicyInput{
  89. Bucket: bucket,
  90. Policy: aws.String(policy),
  91. })
  92. if err != nil {
  93. log.Fatalln("PutBucketPolicy err", err)
  94. }
  95. }
  96. func stuff() {
  97. // downloader := s3manager.NewDownloader(newSession)
  98. // numBytes, err := downloader.Download(file,
  99. // &s3.GetObjectInput{
  100. // Bucket: bucket,
  101. // Key: aws.String(objectName),
  102. // })
  103. // if err != nil {
  104. // fmt.Println("Failed to download file", err)
  105. // return
  106. // }
  107. // fmt.Println("Downloaded file", file.Name(), numBytes, "bytes")
  108. // file.Seek(0, io.SeekStart)
  109. // objectName = "2_" + objectName
  110. // res, err = s3Client.PutObject(&s3.PutObjectInput{
  111. // Body: file,
  112. // Bucket: bucket,
  113. // Key: aws.String(objectName),
  114. // ContentType: aws.String(contentType),
  115. // })
  116. // if err != nil {
  117. // log.Fatalln("PutObject err:", err)
  118. // }
  119. // log.Printf("Successfully uploaded %s, res %d\n", objectName, res)
  120. // result, err := s3Client.GetBucketPolicy(&s3.GetBucketPolicyInput{
  121. // Bucket: bucket,
  122. // })
  123. // fmt.Println(result, err)
  124. }