搜索本产品文档关键词
初始化
所有文档
menu

BOS 对象存储

初始化

快速入门

  1. 初始化一个带有STS验证的BosClient。

    BosClient是与BOS服务交互的客户端,BOS Android SDK的BOS操作都是通过BosClient完成的。

    示例代码:

    Java
    1BosClientConfiguration config = new BosClientConfiguration(); //初始化一个带有STS验证的BosClient
    2config.setCredentials(new DefaultBceSessionCredentials(<AccessKeyID>, <SecretAccessKey>, <Token>); //STS返回的临时AK/SK及Token
    3config.setEndpoint(<EndPoint>); //传入Bucket所在区域域名
    4BosClient client = new BosClient(config);
  2. 新建一个Bucket。

    Bucket是BOS上的命名空间,相当于数据的容器,可以存储若干数据实体(Object)。在您上传数据前,必须先创建一个Bucket。

    示例代码:

    Java
    1BosClient client = new BosClient(config);    //创建BOSClient实例
    2client.createBucket(<BucketName>);     //新建一个Bucket,指定Bucket名称
  3. 上传Object。

    Object是BOS中最基本的数据单元,您可以把Object简单的理解为文件。对于一个简单的Object的上传,BOS为您提供了四种方式:文件形式上传、数据流形式上传、二进制串上传和字符串上传。

    示例代码:

    Java
    1// 获取指定文件
    2File file = new File(<FilePath>);     //指定文件路径
    3
    4// 以文件形式上传Object
    5PutObjectResponse putObjectFromFileResponse = client.putObject(<BucketName>, <ObjectKey>, file);
    6
    7// 获取数据流
    8InputStream inputStream = new FileInputStream(<FilePath>);
    9
    10// 以数据流形式上传Object
    11PutObjectResponse putObjectResponseFromInputStream = client.putObject(<BucketName>, <ObjectKey>, inputStream);
    12
    13// 以二进制串上传Object
    14PutObjectResponse putObjectResponseFromByte = client.putObject(<BucketName>, <ObjectKey>, <byte>);
    15
    16// 以字符串上传Object
    17PutObjectResponse putObjectResponseFromString = client.putObject(<BucketName>, <ObjectKey>, <string>);
    18
    19// 打印ETag
    20System.out.println(putObjectFromFileResponse.getETag());
  4. 查看Bucket下的Object列表。

    当您完成一系列上传后,可以参考如下代码来查看Bucket下的全部Object。

    示例代码:

    Java
    1// 获取指定Bucket下的所有Object信息
    2ListObjectsResponse listing = client.listObjects(<BucketName>);
    3
    4// 遍历所有Object
    5for (BosObjectSummary objectSummary : listing.getContents()) {
    6  System.out.println("ObjectKey: " + objectSummary.getKey());
    7  }
  5. 获取指定Object

    用户可以参考如下代码来实现对一个或者多个Object的获取。

    示例代码:

    Java
    1// 获取Object,返回结果为BosObject对象
    2BosObject object = client.getObject(<BucketName>, <ObjectKey>);
    3
    4// 获取ObjectMeta
    5ObjectMetadata meta = object.getObjectMetadata();
    6
    7// 获取Object的输入流
    8InputStream objectContent = object.getObjectContent();
    9
    10// 处理Object
    11...
    12
    13// 关闭流
    14objectContent.close();

完整示例

Java
1import java.io.File;
2import java.io.FileOutputStream;
3import java.io.IOException;
4import java.io.InputStream;
5
6import android.os.Bundle;
7
8import com.baidubce.BceClientException;
9import com.baidubce.BceServiceException;
10import com.baidubce.auth.DefaultBceCredentials;
11import com.baidubce.development.AppSettings;
12import com.baidubce.development.BaseActivity;
13import com.baidubce.development.R;
14import com.baidubce.services.bos.BosClient;
15import com.baidubce.services.bos.BosClientConfiguration;
16import com.baidubce.services.bos.model.BosObject;
17import com.baidubce.services.bos.model.BosObjectSummary;
18import com.baidubce.services.bos.model.CreateBucketResponse;
19import com.baidubce.services.bos.model.ListObjectsResponse;
20import com.baidubce.services.bos.model.ObjectMetadata;
21import com.baidubce.services.bos.model.PutObjectResponse;
22import com.baidubce.util.BLog;
23
24public class ExampleActivity extends BaseActivity {
25
26    @Override
27    protected void onCreate(Bundle savedInstanceState) {
28        super.onCreate(savedInstanceState);
29        setContentView(R.layout.activity_main);
30        //打开bossdk运行时log
31        BLog.enableLog();
32        
33        BosClientConfiguration config = new BosClientConfiguration(); //初始化一个带有STS验证的BosClient
34        config.setCredentials(new DefaultBceSessionCredentials(<AccessKeyID>, <SecretAccessKey>, <Token>); //STS返回的临时AK/SK及Token
35        config.setEndpoint(<EndPoint>); //Bucket所在区域
36        final BosClient client = new BosClient(config);
37
38        new Thread(new Runnable() {
39
40            @Override
41            public void run() {
42
43                try {
44                    //创建Bucket
45                    CreateBucketResponse response = client.createBucket(<BucketName>); //新建一个Bucket并指定Bucket名称
46                    System.out.println(response.getLocation());
47                    System.out.println(response.getName());
48
49                    //上传Object
50                    File file = new File(<Path>);//上传文件的目录
51                    PutObjectResponse putObjectFromFileResponse = client.putObject(<BucketName>, <ObjectKey>, file);
52                    System.out.println(putObjectFromFileResponse.getETag());
53
54                    //查看Object
55                    ListObjectsResponse list = client.listObjects(<BucketName>);
56                    for (BosObjectSummary objectSummary : list.getContents()) {
57                        System.out.println("ObjectKey: " + objectSummary.getKey());
58                    }
59
60                    // 获取Object
61                    BosObject object = client.getObject(<BucketName>, <ObjectKey>);
62                    // 获取ObjectMeta
63                    ObjectMetadata meta = object.getObjectMetadata();
64                    // 获取Object的输入流
65                    InputStream objectContent = object.getObjectContent();
66                    // 处理Object
67                    FileOutputStream fos=new FileOutputStream(<Path>);//下载文件的目录/文件名
68                    byte[] buffer=new byte[2048];
69                    int count=0;
70                    while ((count=objectContent.read(buffer))>=0) {
71                        fos.write(buffer,0,count);
72                    }
73
74                    // 关闭流
75                    objectContent.close();
76                    fos.close();
77                    System.out.println(meta.getETag());
78                    System.out.println(meta.getContentLength());
79
80                }catch (BceServiceException e) {
81                    System.out.println("Error ErrorCode: " + e.getErrorCode());
82                    System.out.println("Error RequestId: " + e.getRequestId());
83                    System.out.println("Error StatusCode: " + e.getStatusCode());
84                    System.out.println("Error Message: " + e.getMessage());
85                    System.out.println("Error ErrorType: " + e.getErrorType());
86                } catch (BceClientException e) {
87                    System.out.println("Error Message: " + e.getMessage());
88                } catch (IOException e) {
89                    // TODO Auto-generated catch block
90                    e.printStackTrace();
91                }
92
93
94
95            }
96        }).start();
97
98    }
99}

新建带有STS验证的BosClient

BosClient是BOS服务的客户端,为开发者与BOS服务进行交互提供了一系列的方法。在使用SDK发起对BOS的请求前,您需要初始化一个BosClient实例,并对它进行一些必要设置。

说明:Android SDK主要用于移动端开发的场景,移动端是一个不受信任的环境,把AccessKeyId和SecretAccessKey直接保存在终端用来加签请求,存在极高的风险。故推荐您使用STS鉴权模式。STS的详细介绍请参考 临时授权访问

使用STS方式需要您在调用API时首先创建带有STS的BosClient来执行,目前BOS的STS只支持如下方法的API调用:

  • DeleteObject
  • PutObject
  • ListParts
  • GetObject
  • DoesBucketExist
  • CompleteMultipartUpload
  • AbortMultipartUpload
  • InitiateMultipartUpload
  • UploadPart

示例代码:用户可以参考如下代码新建一个带有STS验证的BosClient:

Java
1  BosClientConfiguration config = new BosClientConfiguration(); //初始化一个带有STS验证的BosClient
2  config.setCredentials(new DefaultBceSessionCredentials(<AccessKeyID>, <SecretAccessKey>, <Token>); //STS返回的临时AK/SK及Token
3  config.setEndpoint(<EndPoint>); //传入Bucket所在区域域名。EndPoint是指BOS服务在各个区域的域名地址,例如北京域名为bj.bcebos.com
4  BosClient client = new BosClient(config);

注意:EndPoint参数只能用指定的包含区域的域名来进行定义。百度智能云目前开放了多区域支持,请参考 区域选择说明

目前支持 “华北-北京”、“华南-广州” 和 “华东-苏州” 三个区域。北京区域:http://bj.bcebos.com,广州区域:http://gz.bcebos.com,苏州区域:http://su.bcebos.com

配置HTTPS协议访问BOS

BOS支持HTTPS传输协议,您可以通过如下两种方式在BOS Android SDK中使用HTTPS访问BOS服务:

  • 在endpoint中指明https:

    Java
    1String endpoint = "https://bj.bcebos.com";
    2String ak = "ak";
    3String sk = "sk";
    4BosClientConfiguration config = new BosClientConfigration();
    5config.setEndpoint(endpoint);  
    6config.setCredentials(new DefaultBceCredentials(ak, sk));
    7BosClient client = new BosClient(config);
  • 通过调用setProtocol方法设置https协议:

    Java
    1String endpoint = "bj.bcebos.com"; // endpoint中不包含protocol
    2String ak = "ak";
    3String sk = "sk";
    4BosClientConfiguration config = new BosClientConfigration();
    5config.setEndpoint(endpoint);  
    6config.setCredentials(new DefaultBceCredentials(ak, sk));
    7config.setProtocol(Protocol.HTTPS); // 如果不指明, 则使用http
    8BosClient client = new BosClient(config);

    注意: 如果在endpoint中指明了protocol, 则endpoint中的生效, 另外单独再调用setProtocol()不起作用。

    Java
    1String endpoint = "http://bj.bcebos.com";
    2String ak = "ak";
    3String sk = "sk";
    4BosClientConfiguration config = new BosClientConfigration();
    5config.setEndpoint(endpoint); 
    6config.setCredentials(new DefaultBceCredentials(ak, sk));
    7config.setProtocol(Protocol.HTTPS); // endpoint中已经指明, 此为无效操作, 对http也是如此
    8BosClient client = new BosClient(config);

配置BosClient

如果您需要配置BosClient的一些细节的参数,可以在构造BosClient的时候传入BosClientConfiguration对象。 BosClientConfiguration是BOS服务的配置类,可以通过BosClientConfiguration对基本网络参数进行设置。

设置网络参数

您可以使用BosClientConfiguration对基本网络参数进行设置。

  • 示例代码

    Java
    1BosClientConfiguration config = new BosClientConfiguration();
    2
    3// 设置HTTP最大连接数为10
    4config.setMaxConnections(10);
    5
    6// 设置TCP连接超时为5000毫秒
    7config.setConnectionTimeout(5000);
    8
    9// 设置Socket传输数据超时的时间为2000毫秒
    10config.setSocketTimeout(2000);
  • 参数说明

    通过BosClientConfiguration能指定的所有参数如下表所示:

    参数
    说明
    UserAgent 用户代理,指HTTP的User-Agent
    Protocol 连接协议类型,缺省值HTTP协议
    LocalAddress 本地地址
    ConnectionTimeoutInMillis 建立连接的超时时间(单位:毫秒),缺省值为30000
    SocketTimeoutInMillis 通过打开的连接传输数据的超时时间(单位:毫秒),缺省值为30000
    MaxConnections 允许打开的最大HTTP连接数,缺省值为5
    RetryPolicy 连接重试策略
    SocketBufferSizeInBytes Socket缓冲区大小
    StreamBufferSize 流文件缓冲区大小
    Ipv4Priority Ipv4优先,缺省值false
上一篇
安装SDK工具包
下一篇
Bucket管理