github.com/minio/minio-go/v6@v6.0.57/README_zh_CN.md (about) 1 # 适用于与Amazon S3兼容云存储的MinIO Go SDK [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io) [![Sourcegraph](https://sourcegraph.com/github.com/minio/minio-go/-/badge.svg)](https://sourcegraph.com/github.com/minio/minio-go?badge) 2 3 MinIO Go Client SDK提供了简单的API来访问任何与Amazon S3兼容的对象存储服务。 4 5 **支持的云存储:** 6 7 - AWS Signature Version 4 8 - Amazon S3 9 - MinIO 10 11 - AWS Signature Version 2 12 - Google Cloud Storage (兼容模式) 13 - Openstack Swift + Swift3 middleware 14 - Ceph Object Gateway 15 - Riak CS 16 17 本文我们将学习如何安装MinIO client SDK,连接到MinIO,并提供一下文件上传的示例。对于完整的API以及示例,请参考[Go Client API Reference](https://docs.min.io/docs/golang-client-api-reference)。 18 19 本文假设你已经有 [Go开发环境](https://golang.org/doc/install)。 20 21 ## 从Github下载 22 ```sh 23 go get -u github.com/minio/minio-go 24 ``` 25 26 ## 初始化MinIO Client 27 MinIO client需要以下4个参数来连接与Amazon S3兼容的对象存储。 28 29 | 参数 | 描述| 30 | :--- | :--- | 31 | endpoint | 对象存储服务的URL | 32 | accessKeyID | Access key是唯一标识你的账户的用户ID。 | 33 | secretAccessKey | Secret key是你账户的密码。 | 34 | secure | true代表使用HTTPS | 35 36 37 ```go 38 package main 39 40 import ( 41 "github.com/minio/minio-go/v6" 42 "log" 43 ) 44 45 func main() { 46 endpoint := "play.min.io" 47 accessKeyID := "Q3AM3UQ867SPQQA43P2F" 48 secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" 49 useSSL := true 50 51 // 初使化 minio client对象。 52 minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL) 53 if err != nil { 54 log.Fatalln(err) 55 } 56 57 log.Printf("%#v\n", minioClient) // minioClient初使化成功 58 } 59 ``` 60 61 ## 示例-文件上传 62 本示例连接到一个对象存储服务,创建一个存储桶并上传一个文件到存储桶中。 63 64 我们在本示例中使用运行在 [https://play.min.io](https://play.min.io) 上的MinIO服务,你可以用这个服务来开发和测试。示例中的访问凭据是公开的。 65 66 ### FileUploader.go 67 ```go 68 package main 69 70 import ( 71 "github.com/minio/minio-go/v6" 72 "log" 73 ) 74 75 func main() { 76 endpoint := "play.min.io" 77 accessKeyID := "Q3AM3UQ867SPQQA43P2F" 78 secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" 79 useSSL := true 80 81 // 初使化minio client对象。 82 minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL) 83 if err != nil { 84 log.Fatalln(err) 85 } 86 87 // 创建一个叫mymusic的存储桶。 88 bucketName := "mymusic" 89 location := "us-east-1" 90 91 err = minioClient.MakeBucket(bucketName, location) 92 if err != nil { 93 // 检查存储桶是否已经存在。 94 exists, err := minioClient.BucketExists(bucketName) 95 if err == nil && exists { 96 log.Printf("We already own %s\n", bucketName) 97 } else { 98 log.Fatalln(err) 99 } 100 } 101 log.Printf("Successfully created %s\n", bucketName) 102 103 // 上传一个zip文件。 104 objectName := "golden-oldies.zip" 105 filePath := "/tmp/golden-oldies.zip" 106 contentType := "application/zip" 107 108 // 使用FPutObject上传一个zip文件。 109 n, err := minioClient.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType:contentType}) 110 if err != nil { 111 log.Fatalln(err) 112 } 113 114 log.Printf("Successfully uploaded %s of size %d\n", objectName, n) 115 } 116 ``` 117 118 ### 运行FileUploader 119 ```sh 120 go run file-uploader.go 121 2016/08/13 17:03:28 Successfully created mymusic 122 2016/08/13 17:03:40 Successfully uploaded golden-oldies.zip of size 16253413 123 124 mc ls play/mymusic/ 125 [2016-05-27 16:02:16 PDT] 17MiB golden-oldies.zip 126 ``` 127 128 ## API文档 129 完整的API文档在这里。 130 * [完整API文档](https://docs.min.io/docs/golang-client-api-reference) 131 132 ### API文档 : 操作存储桶 133 * [`MakeBucket`](https://docs.min.io/docs/golang-client-api-reference#MakeBucket) 134 * [`ListBuckets`](https://docs.min.io/docs/golang-client-api-reference#ListBuckets) 135 * [`BucketExists`](https://docs.min.io/docs/golang-client-api-reference#BucketExists) 136 * [`RemoveBucket`](https://docs.min.io/docs/golang-client-api-reference#RemoveBucket) 137 * [`ListObjects`](https://docs.min.io/docs/golang-client-api-reference#ListObjects) 138 * [`ListObjectsV2`](https://docs.min.io/docs/golang-client-api-reference#ListObjectsV2) 139 * [`ListIncompleteUploads`](https://docs.min.io/docs/golang-client-api-reference#ListIncompleteUploads) 140 141 ### API文档 : 存储桶策略 142 * [`SetBucketPolicy`](https://docs.min.io/docs/golang-client-api-reference#SetBucketPolicy) 143 * [`GetBucketPolicy`](https://docs.min.io/docs/golang-client-api-reference#GetBucketPolicy) 144 145 ### API文档 : 存储桶通知 146 * [`SetBucketNotification`](https://docs.min.io/docs/golang-client-api-reference#SetBucketNotification) 147 * [`GetBucketNotification`](https://docs.min.io/docs/golang-client-api-reference#GetBucketNotification) 148 * [`RemoveAllBucketNotification`](https://docs.min.io/docs/golang-client-api-reference#RemoveAllBucketNotification) 149 * [`ListenBucketNotification`](https://docs.min.io/docs/golang-client-api-reference#ListenBucketNotification) (MinIO Extension) 150 151 ### API文档 : 操作文件对象 152 * [`FPutObject`](https://docs.min.io/docs/golang-client-api-reference#FPutObject) 153 * [`FGetObject`](https://docs.min.io/docs/golang-client-api-reference#FPutObject) 154 * [`FPutObjectWithContext`](https://docs.min.io/docs/golang-client-api-reference#FPutObjectWithContext) 155 * [`FGetObjectWithContext`](https://docs.min.io/docs/golang-client-api-reference#FGetObjectWithContext) 156 157 ### API文档 : 操作对象 158 * [`GetObject`](https://docs.min.io/docs/golang-client-api-reference#GetObject) 159 * [`PutObject`](https://docs.min.io/docs/golang-client-api-reference#PutObject) 160 * [`GetObjectWithContext`](https://docs.min.io/docs/golang-client-api-reference#GetObjectWithContext) 161 * [`PutObjectWithContext`](https://docs.min.io/docs/golang-client-api-reference#PutObjectWithContext) 162 * [`PutObjectStreaming`](https://docs.min.io/docs/golang-client-api-reference#PutObjectStreaming) 163 * [`StatObject`](https://docs.min.io/docs/golang-client-api-reference#StatObject) 164 * [`CopyObject`](https://docs.min.io/docs/golang-client-api-reference#CopyObject) 165 * [`RemoveObject`](https://docs.min.io/docs/golang-client-api-reference#RemoveObject) 166 * [`RemoveObjects`](https://docs.min.io/docs/golang-client-api-reference#RemoveObjects) 167 * [`RemoveIncompleteUpload`](https://docs.min.io/docs/golang-client-api-reference#RemoveIncompleteUpload) 168 169 ### API文档: 操作加密对象 170 * [`GetEncryptedObject`](https://docs.min.io/docs/golang-client-api-reference#GetEncryptedObject) 171 * [`PutEncryptedObject`](https://docs.min.io/docs/golang-client-api-reference#PutEncryptedObject) 172 173 ### API文档 : Presigned操作 174 * [`PresignedGetObject`](https://docs.min.io/docs/golang-client-api-reference#PresignedGetObject) 175 * [`PresignedPutObject`](https://docs.min.io/docs/golang-client-api-reference#PresignedPutObject) 176 * [`PresignedHeadObject`](https://docs.min.io/docs/golang-client-api-reference#PresignedHeadObject) 177 * [`PresignedPostPolicy`](https://docs.min.io/docs/golang-client-api-reference#PresignedPostPolicy) 178 179 ### API文档 : 客户端自定义设置 180 * [`SetAppInfo`](http://docs.min.io/docs/golang-client-api-reference#SetAppInfo) 181 * [`SetCustomTransport`](http://docs.min.io/docs/golang-client-api-reference#SetCustomTransport) 182 * [`TraceOn`](http://docs.min.io/docs/golang-client-api-reference#TraceOn) 183 * [`TraceOff`](http://docs.min.io/docs/golang-client-api-reference#TraceOff) 184 185 ## 完整示例 186 187 ### 完整示例 : 操作存储桶 188 * [makebucket.go](https://github.com/minio/minio-go/blob/master/examples/s3/makebucket.go) 189 * [listbuckets.go](https://github.com/minio/minio-go/blob/master/examples/s3/listbuckets.go) 190 * [bucketexists.go](https://github.com/minio/minio-go/blob/master/examples/s3/bucketexists.go) 191 * [removebucket.go](https://github.com/minio/minio-go/blob/master/examples/s3/removebucket.go) 192 * [listobjects.go](https://github.com/minio/minio-go/blob/master/examples/s3/listobjects.go) 193 * [listobjectsV2.go](https://github.com/minio/minio-go/blob/master/examples/s3/listobjectsV2.go) 194 * [listincompleteuploads.go](https://github.com/minio/minio-go/blob/master/examples/s3/listincompleteuploads.go) 195 196 ### 完整示例 : 存储桶策略 197 * [setbucketpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketpolicy.go) 198 * [getbucketpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketpolicy.go) 199 * [listbucketpolicies.go](https://github.com/minio/minio-go/blob/master/examples/s3/listbucketpolicies.go) 200 201 ### 完整示例 : 存储桶通知 202 * [setbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketnotification.go) 203 * [getbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketnotification.go) 204 * [removeallbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeallbucketnotification.go) 205 * [listenbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/minio/listenbucketnotification.go) (MinIO扩展) 206 207 ### 完整示例 : 操作文件对象 208 * [fputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject.go) 209 * [fgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject.go) 210 * [fputobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject-context.go) 211 * [fgetobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject-context.go) 212 213 ### 完整示例 : 操作对象 214 * [putobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject.go) 215 * [getobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject.go) 216 * [putobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject-context.go) 217 * [getobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject-context.go) 218 * [statobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/statobject.go) 219 * [copyobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/copyobject.go) 220 * [removeobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobject.go) 221 * [removeincompleteupload.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeincompleteupload.go) 222 * [removeobjects.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobjects.go) 223 224 ### 完整示例 : 操作加密对象 225 * [put-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/put-encrypted-object.go) 226 * [get-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/get-encrypted-object.go) 227 * [fput-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputencrypted-object.go) 228 229 ### 完整示例 : Presigned操作 230 * [presignedgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedgetobject.go) 231 * [presignedputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedputobject.go) 232 * [presignedheadobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedheadobject.go) 233 * [presignedpostpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedpostpolicy.go) 234 235 ## 了解更多 236 * [完整文档](https://docs.min.io) 237 * [MinIO Go Client SDK API文档](https://docs.min.io/docs/golang-client-api-reference) 238 239 ## 贡献 240 [贡献指南](https://github.com/minio/minio-go/blob/master/docs/zh_CN/CONTRIBUTING.md) 241 242 [![Build Status](https://travis-ci.org/minio/minio-go.svg)](https://travis-ci.org/minio/minio-go) 243 [![Build status](https://ci.appveyor.com/api/projects/status/1d05e6nvxcelmrak?svg=true)](https://ci.appveyor.com/project/harshavardhana/minio-go) 244