对象存储SDK文档

滴滴云技术支持发表于:2018年03月15日 18:31:50更新于:2019年08月20日 19:01:45

滴滴云对象存储服务(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,进入“控制台”然后按下图示例申请:


0015c905c7dc18ad81c22fd85e1516e

0015c905da015c7b0b30346b40e1343

操作步骤:

(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方法名是否支持备注
1make_bucket
2list_buckets
3bucket_exists
4remove_bucket
5list_objects
6list_objects_v2
7list_incomplete_uploads


4.1.2 Object operations

编号SDK方法名是否支持备注
1
get_object
2put_object不支持单独创建目录,但是对名字中有“/”的在创建object时同时创建了目录(如:my_dir/my_object_name)
3copy_object

4stat_object支持stat目录,但是目录后必须加上“/”(如:my_dir/)
5
remove_object可删除目录,目录必须为空,并且目录必须以“/”结尾(如:my_test/)
6remove_objects
目录操作同上
7remove_incomplete_upload

8fput_object
9fget_object
10get_partial_object

4.1.3 Presigned operations

编号SDK方法名是否支持备注
1presigned_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
2ListBuckets
3BucketExists
4RemoveBucket
5ListObjects
6ListObjectsV2
7ListIncompleteUploads

4.2.2 Object operations

编号SDK方法名是否支持备注
1GetObject
2PutObject

minio.PutObjectOptions选项:

1)opts.ContentType, opts.ContentEncoding, opts.ContentDisposition, opts.CacheControl 都正常;
2)如果不填opts.ContentType,默认会填“application/octet-stream”;
3)支持opts.UserMetadata为"X-Amz-Meta-"开头的额外数据存储;
4)除以上三条外,其余opts不支持。

3CopyObjectCopy时的一些条件,比如range不支持,因为标准的S3协议里也不支持。
4StatObject支持文件和目录,目录后面需要加上“/”。
5RemoveObject同上
6RemoveObjects同上
7RemoveIncompleteUpload
8FPutObject

PutObjectOptions里仅支持:ContentType,ContentEncoding,ContentDisposition,CacheControl;

UserMetadata仅支持"X-Amz-Meta-"前缀的数据存储;

9FGetObject

10ComposeObject非S3标准
11NewSourceInfo
12NewDestinationInfo
13PutObjectWithContext
14GetObjectWithContext
15FPutObjectWithContext
16FGetObjectWithContext
17RemoveObjectsWithContext
18SelectObjectContent非S3标准

4.2.3 Encrypted Object operations

不支持。

4.2.4 Presigned operations

编号SDK方法名是否支持备注
1
PresignedGetObject
2PresignedPutObject
3PresignedPostPolicy

4.2.5 Bucket Policy/Notification Operations

不支持。

4.2.6 Client custom settings

编号SDK方法名是否支持备注
1SetAppInfo非S3标准
2SetCustomTransport非S3标准
3TraceOn
4TraceOff
5SetS3TransferAccelerate非S3标准

4.3 minio-java支持

4.3.1 Bucket operations

编号SDK方法名是否支持备注
1
makeBucket
2listBuckets
3bucketExists
4removeBucket
5listObjects
6listIncompleteUploads

4.3.2 Object operations

编号SDK方法名是否支持备注
1getObject
2putObject
3copyObject
4statObject
5removeObject
6removeIncompleteUpload

4.3.3 Presigned operations

编号SDK方法名是否支持备注
1presignedGetObject
2presignedPutObject
3presignedPostPolicy

4.4 minio-js支持

4.4.1 Bucket operations

编号SDK方法名是否支持备注
1makeBucket
2listBuckets
3bucketExists
4removeBucket
5listObjects
6listObjectsV2
7listIncompleteUploads

4.4.2 Object operations

编号SDK方法名是否支持备注
1
getObject
2putObject不支持单独创建目录,但是对名字中有“/”的在创建object时同时创建了目录(如:my_dir/my_object_name)
3copyObject

4statObject支持stat目录,但是目录后必须加上“/”(如:my_dir/)
5
removeObject可删除目录,目录必须为空,并且目录必须以“/”结尾(如:my_test/)
6removeObjects
目录操作同上
7removeIncompleteUpload

8fPutObject
9fGetObject
10getPartialObject

4.4.3 Presigned operations

编号SDK方法名是否支持备注
1presignedGetObject
2
presignedPutObject
3
presignedPostPolicy

4.4.4 Bucket policy/notification operations

不支持