minio.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package main
  2. import (
  3. "crypto/md5"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "log"
  8. "os"
  9. "github.com/minio/minio-go"
  10. )
  11. func main() {
  12. endpoint := "127.0.0.1:9000"
  13. accessKeyID := "access_123"
  14. secretAccessKey := "secret_123"
  15. useSSL := false
  16. location := "us-east-1"
  17. minioClient, err := minio.NewWithRegion(endpoint,
  18. accessKeyID, secretAccessKey,
  19. useSSL, location)
  20. if err != nil {
  21. log.Fatalln(err)
  22. }
  23. buckets, err := minioClient.ListBuckets()
  24. if err != nil {
  25. log.Fatalln("ListBuckets err:", err)
  26. }
  27. fmt.Println("Existing buckets:")
  28. for _, bucket := range buckets {
  29. fmt.Println(bucket)
  30. }
  31. bucketName := "photolist"
  32. err = minioClient.MakeBucket(bucketName, location)
  33. if err != nil {
  34. var minErr minio.ErrorResponse
  35. if errors.As(err, &minErr) && minErr.Code == "BucketAlreadyOwnedByYou" {
  36. // log.Printf("%s already exists\n", bucketName)
  37. } else {
  38. log.Fatalln("cant create bucker", bucketName, err)
  39. }
  40. } else {
  41. log.Printf("bucket %s created\n", bucketName)
  42. }
  43. objectName := "building_1.jpg"
  44. contentType := "image/jpeg"
  45. file, err := os.Open("./building_1.jpg")
  46. if err != nil {
  47. log.Fatalln("cant open file:", err)
  48. }
  49. n, err := minioClient.PutObject(bucketName, objectName, file, -1, minio.PutObjectOptions{ContentType: contentType})
  50. if err != nil {
  51. log.Fatalln("PutObject err:", err)
  52. }
  53. log.Printf("Successfully uploaded %s of size %d\n", objectName, n)
  54. // file.Seek(0, io.SeekStart)
  55. reader, err := minioClient.GetObject(bucketName, objectName, minio.GetObjectOptions{})
  56. if err != nil {
  57. log.Fatalln("GetObject err:", err)
  58. }
  59. defer reader.Close()
  60. hasher := md5.New()
  61. io.Copy(hasher, reader)
  62. log.Printf("download file with md5sum: %x\n", hasher.Sum(nil))
  63. // -----
  64. // return
  65. policy := `{
  66. "Version":"2012-10-17",
  67. "Statement":[
  68. {
  69. "Action":["s3:GetObject"],
  70. "Effect":"Allow",
  71. "Principal":{"AWS":["*"]},
  72. "Resource":["arn:aws:s3:::` + bucketName + `/*"],
  73. "Sid":""
  74. }
  75. ]
  76. }`
  77. err = minioClient.SetBucketPolicy(bucketName, policy)
  78. if err != nil {
  79. log.Fatalln("SetBucketPolicy err", err)
  80. }
  81. }