帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

Java SDK

QingStor Java SDK 已在 GitHub 开源,下文为简要使用文档。更多详细信息请参见 GitHub 项目页面, 和Java SDK API 文档。Java SDK 使用 Snips 工具生成, 各个调用的均与具体的 Qingstor Restful API 对应, 返回码、请求头、错误码等规定请参照具体 API 文档的描述。

安装

可以下载源码:

> git clone git@github.com:yunify/qingstor-sdk-java.git

也可以访问 GitHub 的 release 页面 下载压缩包

快速开始

使用 SDK 之前请先在 青云控制台 申请 access key 。

初始化服务

发起请求前首先建立需要初始化服务:

import com.qingstor.sdk.config.EvnContext;
import com.qingstor.sdk.service.*;

EvnContext evn = new EvnContext("ACCESS_KEY_ID", "SECRET_ACCESS_KEY");
QingStor storService = new QingStor(evn);

上面代码初始化了一个 QingStor Service

获取账户下的 Bucket 列表

ListBucketsOutput listOutput = storService.listBuckets(null);

创建 Bucket

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone:

Bucket bucket = storService.getBucket("test-bucket", "pek3a");
Bucket.PutBucketOutput putBucketOutput = bucket.put();

获取 Bucket 中存储的 Object 列表

Bucket.ListjavaObjectsOutput listObjectsOutput = Bucket.listObjects(null);

创建一个 Object

例如一个文件:

Bucket.PutObjectInput input = new Bucket.PutObjectInput();
File f = new File("test_file");
input.setBodyInputFile(f);
input.setContentType("text/plain");
input.setContentLength((int) f.length());
Bucket.PutObjectOutput putObjectOutput = bucket.putObject(test_object, input);

删除一个 Object

Bucket.DeleteObjectOutput deleteObjectOutput = bucket.deleteObject("test_file");

本地时间和网络时间不同步

如果用户本地时间与网络时间不同步会因签名原因造成请求失败。您还需要从服务端获取网络时间。

下面是一个关于服务端如何返回正确时间到客户端的示例。

Calendar instance = Calendar.getInstance(TimeZone.getTimeZone("Asia/Beijing"));
String gmtTime = QSSignatureUtil.formatGmtDate(instance.getTime());
return gmtTime;

在您从服务端获取到正确时间后,您需要在调用 reqHandler.sendAsync(); 方法前将时间设置到 SDK 中。

reqHandler.getBuilder().setHeader(QSConstant.HEADER_PARAM_KEY_DATE, gmtTime);
reqHandler.sendAsync();

使用服务端签名

以上传文件为例:

public static void javaSdkSendDemo() {
    try {
        //引入jar包后先把相关导入按照IDE提示一一导入
        //创建EvnContext
        EnvContext env = new EnvContext("your_access_key", "your_secret_key");

        //你的bucket所在的zone,比如pek3a
        String zoneName = "pek3a";

        //bucket名称,如果没有创建先从控制台或者api创建bucket
        String bucketName = "demo_bucket";
        Bucket bucket = new Bucket(env, zoneName, bucketName);

        //最终上传到对象存储的文件显示的文件名称
        String objectKey = "myfile";
        Bucket.PutObjectInput input = new Bucket.PutObjectInput();

        //要上传的本地文件的路径
        File f = new File("/your_file_path.txt");
        input.setBodyInputFile(f);
        input.setContentLength(f.length());
        RequestHandler reqHandler = bucket.putObjectAsyncRequest(objectKey, input,
                new ResponseCallBack<Bucket.PutObjectOutput>() {
                    public void onAPIResponse(Bucket.PutObjectOutput output) {
                        if (output.getStatueCode() != 201) {
                            System.out.println("Message = " + output.getMessage());
                            System.out.println("RequestId = " + output.getRequestId());
                            System.out.println("Code = " + output.getCode());
                            System.out.println("StatueCode = " + output.getStatueCode());
                            System.out.println("Url = " + output.getUrl());
                        }
                        System.exit(0);
                    }
                });
        Calendar instance = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"));
        String gmtTime = QSSignatureUtil.formatGmtDate(instance.getTime());

        //验证需要这个Date header
        reqHandler.getBuilder().setHeader(QSConstant.HEADER_PARAM_KEY_DATE, gmtTime);
        String strToSignature = reqHandler.getStringToSignature();
        String serverAuthorization = QSSignatureUtil.generateSignature(env.getAccessSecret(),
                strToSignature);
        reqHandler.setSignature(env.getAccessKey(), serverAuthorization);
        //异步发送
        reqHandler.sendAsync();

    }catch (QSException e) {
        e.printStackTrace();
    }
}