滴滴云对象存储服务(S3)与AWS S3协议兼容,目前建议使用MINIO SDK,支持Python/Go/Java/JS。
Minio是一个开源的对象存储项目,它兼容亚马逊S3云存储服务接口,github地址是:https://github.com/minio。
Minio SDK是一个非常轻量SDK,下文将以Python(minio-py)、Golang(minio-go)、Java(minio-java)和 JS(minio-js)四种语言,在外网CentOS版本环境上介绍如何用Minio SDK来访问滴滴云对象存储S3,其他系统和环境下,下载地址中的例子代码一样通用。
1 密匙获取
在用Minio SDK前,我们先要获取自己对象存储S3的密匙SecretID和SecretKey,注册后先登陆滴滴云官网:https://www.didiyun.com,进入“控制台”然后按下图示例申请:
操作步骤:
(1)点击“API”按钮。
(2)选择“对象存储密钥”。
(3)点击“创建API密钥”。
即可得到的SecretID和SecretKey值.
2 SDK访问域名选择
可以根据不同环境使用不同的域名,可使用域名如下:
外网公共域名:s3.didiyunapi.com
滴滴云DC2上使用域名:s3-internal.didiyunapi.com
下文中,下载下来的代码例子是基于CentOS,用的是外网公共域名,并且在运行示例程序前需要将SecretID和SecretKey替换成自己的。
3 Minio SDK访问滴滴云对象存储(S3)
3.1 minio-py访问
支持Python2.7及以上版本。
3.1.1 用pip安装minio-py
Python2.7:
pip install minio
Python3:
pip3 install minio
3.1.2 例子代码
访问滴滴云对象存储(S3)例子下载地址:
http://img-ys011.didistatic.com/static/gift_tool/minio-py-example.tar.gz
3.1.3 执行
python example_name.py
3.2 minio-go访问
支持Golang1.8及以上的版本。
3.2.1 安装
Golang环境搭好和GOPATH环境变量配置好后:
go get -u github.com/minio/minio-go cd $GOPATH/src mkdir -p golang.org/x cd $GOPATH/src/golang.org/x git clone https://github.com/golang/crypto.git git clone https://github.com/golang/net.git git clone https://github.com/golang/sys.git git clone https://github.com/golang/text.git
3.2.2 例子代码
访问滴滴云对象存储(S3)例子下载地址:
http://img-ys011.didistatic.com/static/gift_tool/minio-go-example.tar.gz
3.2.3 编译和运行
编译:
go build example_name.go
运行:
./example_name
3.3 minio-java访问
3.3.1 下载minio-java的jar包
支持JDK1.8及以上版本。
先安装JDK后,再下载minio-java:
wget http://repo1.maven.org/maven2/io/minio/minio/5.0.3/minio-5.0.3-all.jar
也可以按照 https://github.com/minio/minio-java 中的另外两种方式安装minio-java。
3.3.2 例子代码
访问滴滴云对象存储(S3)例子下载地址:
http://img-ys011.didistatic.com/static/gift_tool/minio-java-example.tar.gz
3.3.3 编译和运行
需要把 minio-5.0.3-all.jar 拷到下载例子解压后的第一级目录下。
执行例子中的build.sh和run.sh即可。
3.4 minio-js访问
支持Node.js 7.0 及以上版本。
3.4.1 用npm安装minio-js
npm install --save minio npm install --save-dev @types/minio
3.4.2 例子代码
访问滴滴云对象存储(S3)例子下载地址:
http://img-ys011.didistatic.com/static/gift_tool/minio-js-example.tar.gz
3.4.3 执行
node example_name.js
4 接口支持说明
滴滴云对象存储(S3)对Minio SDK附合标准S3协议,主要的接口基本都支持了,对一些Minio自己开发的非S3标准的接口没有做支持,各语言SDK接口具体支持情况请参见下文表格。
4.1 minio-py支持
4.1.1 Bucket operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | make_bucket | 是 | |
2 | list_buckets | 是 | |
3 | bucket_exists | 是 | |
4 | remove_bucket | 是 | |
5 | list_objects | 是 | |
6 | list_objects_v2 | 是 | |
7 | list_incomplete_uploads | 是 |
4.1.2 Object operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | get_object | 是 | |
2 | put_object | 是 | 不支持单独创建目录,但是对名字中有“/”的在创建object时同时创建了目录(如:my_dir/my_object_name) |
3 | copy_object | 是 | |
4 | stat_object | 是 | 支持stat目录,但是目录后必须加上“/”(如:my_dir/) |
5 | remove_object | 是 | 可删除目录,目录必须为空,并且目录必须以“/”结尾(如:my_test/) |
6 | remove_objects | 是 | 目录操作同上 |
7 | remove_incomplete_upload | 是 | |
8 | fput_object | 是 | |
9 | fget_object | 是 | |
10 | get_partial_object | 是 |
4.1.3 Presigned operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | presigned_get_object | 是 | |
2 | presigned_put_object | 是 | |
3 | presigned_post_policy | 是 |
4.1.4 Bucket policy/notification operations
不支持
4.2 minio-go支持
4.2.1 Bucket operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | MakeBucket | 是 | |
2 | ListBuckets | 是 | |
3 | BucketExists | 是 | |
4 | RemoveBucket | 是 | |
5 | ListObjects | 是 | |
6 | ListObjectsV2 | 是 | |
7 | ListIncompleteUploads | 是 |
4.2.2 Object operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | GetObject | 是 | |
2 | PutObject | 是 | minio.PutObjectOptions选项: 1)opts.ContentType, opts.ContentEncoding, opts.ContentDisposition, opts.CacheControl 都正常; |
3 | CopyObject | 是 | Copy时的一些条件,比如range不支持,因为标准的S3协议里也不支持。 |
4 | StatObject | 是 | 支持文件和目录,目录后面需要加上“/”。 |
5 | RemoveObject | 是 | 同上 |
6 | RemoveObjects | 是 | 同上 |
7 | RemoveIncompleteUpload | 是 | |
8 | FPutObject | 是 | PutObjectOptions里仅支持:ContentType,ContentEncoding,ContentDisposition,CacheControl; UserMetadata仅支持"X-Amz-Meta-"前缀的数据存储; |
9 | FGetObject | 是 | |
10 | ComposeObject | 否 | 非S3标准 |
11 | NewSourceInfo | 是 | |
12 | NewDestinationInfo | 是 | |
13 | PutObjectWithContext | 是 | |
14 | GetObjectWithContext | 是 | |
15 | FPutObjectWithContext | 是 | |
16 | FGetObjectWithContext | 是 | |
17 | RemoveObjectsWithContext | 是 | |
18 | SelectObjectContent | 否 | 非S3标准 |
4.2.3 Encrypted Object operations
不支持。
4.2.4 Presigned operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | PresignedGetObject | 是 | |
2 | PresignedPutObject | 是 | |
3 | PresignedPostPolicy | 是 |
4.2.5 Bucket Policy/Notification Operations
不支持。
4.2.6 Client custom settings
编号 | SDK方法名 | 是否支持 | 备注 |
1 | SetAppInfo | 否 | 非S3标准 |
2 | SetCustomTransport | 否 | 非S3标准 |
3 | TraceOn | 是 | |
4 | TraceOff | 是 | |
5 | SetS3TransferAccelerate | 否 | 非S3标准 |
4.3 minio-java支持
4.3.1 Bucket operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | makeBucket | 是 | |
2 | listBuckets | 是 | |
3 | bucketExists | 是 | |
4 | removeBucket | 是 | |
5 | listObjects | 是 | |
6 | listIncompleteUploads | 是 |
4.3.2 Object operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | getObject | 是 | |
2 | putObject | 是 | |
3 | copyObject | 是 | |
4 | statObject | 是 | |
5 | removeObject | 是 | |
6 | removeIncompleteUpload | 是 |
4.3.3 Presigned operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | presignedGetObject | 是 | |
2 | presignedPutObject | 是 | |
3 | presignedPostPolicy | 是 |
4.4 minio-js支持
4.4.1 Bucket operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | makeBucket | 是 | |
2 | listBuckets | 是 | |
3 | bucketExists | 是 | |
4 | removeBucket | 是 | |
5 | listObjects | 是 | |
6 | listObjectsV2 | 是 | |
7 | listIncompleteUploads | 是 |
4.4.2 Object operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | getObject | 是 | |
2 | putObject | 是 | 不支持单独创建目录,但是对名字中有“/”的在创建object时同时创建了目录(如:my_dir/my_object_name) |
3 | copyObject | 是 | |
4 | statObject | 是 | 支持stat目录,但是目录后必须加上“/”(如:my_dir/) |
5 | removeObject | 是 | 可删除目录,目录必须为空,并且目录必须以“/”结尾(如:my_test/) |
6 | removeObjects | 是 | 目录操作同上 |
7 | removeIncompleteUpload | 是 | |
8 | fPutObject | 是 | |
9 | fGetObject | 是 | |
10 | getPartialObject | 是 |
4.4.3 Presigned operations
编号 | SDK方法名 | 是否支持 | 备注 |
1 | presignedGetObject | 是 | |
2 | presignedPutObject | 是 | |
3 | presignedPostPolicy | 是 |
4.4.4 Bucket policy/notification operations
不支持