所有文档

          对象存储 BOS

          初始化

          确认Endpoint

          在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于 BOS访问域名 的部分,理解Endpoint相关的概念。 百度智能云目前开放了多区域支持,请参考区域选择说明

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

          访问区域 对应Endpoint
          BJ bj.bcebos.com
          GZ gz.bcebos.com
          SU su.bcebos.com

          获取密钥

          要使用百度智能云BOS,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息:

          注册百度智能云账号

          创建AK/SK

          新建BosClient

          BosClient是BOS服务的客户端,为开发者与BOS服务进行交互提供了一系列的方法。

          使用AK/SK新建BosClient

          通过AK/SK方式访问BOS,用户可以参考如下代码新建一个BosClient:

          public class Sample {
          public static void main(String[] args) {
              String ACCESS_KEY_ID = <your-access-key-id>;                   // 用户的Access Key ID
              String SECRET_ACCESS_KEY = <your-secret-access-key>;           // 用户的Secret Access Key
                  
              // 初始化一个BosClient
              BosClientConfiguration config = new BosClientConfiguration();
              config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY));
              BosClient client = new BosClient(config);
              }
          }

          在上面代码中,ACCESS_KEY_ID对应控制台中的“Access Key ID”,SECRET_ACCESS_KEY对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 管理ACCESSKEY》。

          上面的方式使用默认域名作为BOS的服务地址,如果用户需要自己指定域名,可以通过传入ENDPOINT参数来指定。

          String ACCESS_KEY_ID = <your-access-key-id>;                   // 用户的Access Key ID
          String SECRET_ACCESS_KEY = <your-secret-access-key>;           // 用户的Secret Access Key
          String ENDPOINT = <domain-name>;                               // 用户自己指定的域名
          
          BosClientConfiguration config = new BosClientConfiguration();
          config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID,SECRET_ACCESS_KEY));
          config.setEndpoint(ENDPOINT);
          BosClient client = new BosClient(config);

          注意:ENDPOINT参数只能用指定的包含区域的域名来进行定义,不指定时默认为北京区域http://bj.bcebos.com

          使用STS创建BosClient

          申请STS token

          BOS可以通过STS机制实现第三方的临时授权访问。STS(Security Token Service)是百度智能云提供的临时授权服务。通过STS,您可以为第三方用户颁发一个自定义时效和权限的访问凭证。第三方用户可以使用该访问凭证直接调用百度智能云的API或SDK访问百度智能云资源。

          通过STS方式访问BOS,用户需要先通过STS的client申请一个认证字符串,申请方式可参见百度智能云STS使用介绍

          用STS token新建BOSClient

          申请好STS后,可将STStoken配置到BosClient中,用户可以参考如下代码新建一个BosClient:

          public class StsExample {
              private static final String STS_ENDPOINT = "http://sts.bj.baidubce.com";
              private static final String ACCESS_KEY_ID = "your accesskey id";
              private static final String SECRET_ACCESS_KEY = "your secret accesskey";
          
              public static void main(String[] args) {
                  BceCredentials credentials = new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY);
                  StsClient client = new StsClient(
                          new BceClientConfiguration().withEndpoint(STS_ENDPOINT).withCredentials(credentials)
                  );
                  GetSessionTokenResponse response = client.getSessionToken(new GetSessionTokenRequest());
                  // or simply call:
                  // GetSessionTokenResponse response = client.getSessionToken();
                  // or you can specify limited permissions with ACL:
                  // GetSessionTokenResponse response = client.getSessionToken(new GetSessionTokenRequest().withAcl("blabla"));
                  // build DefaultBceSessionCredentials object from response:
                  BceCredentials bosstsCredentials = new DefaultBceSessionCredentials(
                          response.getAccessKeyId(),
                          response.getSecretAccessKey(),
                          response.getSessionToken());
                  System.out.println("==================================");
                  System.out.println("GetSessionToken result:");
                  System.out.println("    accessKeyId:  " + response.getAccessKeyId());
                  System.out.println("    secretAccessKey:  " + response.getSecretAccessKey());
                  System.out.println("    securityToken:  " + response.getSessionToken());
                  System.out.println("    expiresAt:  " + response.getExpiration().toString());
                  System.out.println("==================================");
          
                  // build bos client
                  BosClientConfiguration config = new BosClientConfiguration();
                  config.setCredentials(bosstsCredentials);
                  BosClient bosClient = new BosClient(config);
              }
          }

          注意: 目前使用STS配置client时,无论对应BOS服务的endpoint在哪里,endpoint都需配置为http://sts.bj.baidubce.com

          配置HTTPS协议访问BOS

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

          • 在endpoint中指明https:

            String endpoint = "https://bj.bcebos.com";
            String ak = "ak";
            String sk = "sk";
            BosClientConfiguration config = new BosClientConfiguration();
            config.setCredentials(new DefaultBceCredentials(ak, sk));
            BosClient client = new BosClient(config);
          • 通过调用setProtocol方法设置https协议:

            String endpoint = "bj.bcebos.com"; // endpoint中不包含protocol
            String ak = "ak";
            String sk = "sk";
            BosClientConfiguration config = new BosClientConfiguration();
            config.setCredentials(new DefaultBceCredentials(ak, sk));
            config.setEndpoint(ENDPOINT);
            config.setProtocol(Protocol.HTTPS); // 如果不指明, 则使用http
            BosClient client = new BosClient(config);

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

            String endpoint = "http://bj.bcebos.com";
            String ak = "ak";
            String sk = "sk";
            BosClientConfiguration config = new BosClientConfiguration();
            config.setCredentials(new DefaultBceCredentials(ak, sk));
            config.setEndpoint(ENDPOINT);    
            config.setProtocol(Protocol.HTTPS); // endpoint中已经指明, 此为无效操作, 对http也是如此
            BosClient client = new BosClient(config);

          配置BosClient

          如果用户需要配置BosClient的一些细节的参数,可以在构造BosClient的时候传入BosClientConfiguration对象。 BosClientConfiguration是BOS服务的配置类,可以为客户端配置代理,最大连接数等参数。

          使用代理

          下面一段代码可以让客户端使用代理访问BOS服务:

          String ACCESS_KEY_ID = <your-access-key-id>;                   // 用户的Access Key ID
          String SECRET_ACCESS_KEY = <your-secret-access-key>;           // 用户的Secret Access Key
          String ENDPOINT = <domain-name>;                               // 用户自己指定的域名
          
          // 创建BosClientConfiguration实例
          BosClientConfiguration config = new BosClientConfiguration();
          
          // 配置代理为本地8080端口
          config.setProxyHost("127.0.0.1");
          config.setProxyPort(8080);
          
          // 创建BOS客户端
          config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID,SECRET_ACCESS_KEY));
          config.setEndpoint(ENDPOINT);
          BosClient client = new BosClient(config);

          使用上面的代码段,客户端的所有操作都会通过127.0.0.1地址的8080端口做代理执行。

          对于有用户验证的代理,可以通过下面的代码段配置用户名和密码:

          // 创建BosClientConfiguration实例
          BosClientConfiguration config = new BosClientConfiguration();
              
          // 配置代理为本地8080端口
          config.setProxyHost("127.0.0.1");
          config.setProxyPort(8080);
              
          //设置用户名和密码
          config.setProxyUsername(<username>);                             //用户名
          config.setProxyPassword(<password>);                             //密码

          设置网络参数

          用户可以用BosClientConfiguration对基本网络参数进行设置:

          BosClientConfiguration config = new BosClientConfiguration();
              
          // 设置HTTP最大连接数为10
          config.setMaxConnections(10);
              
          // 设置TCP连接超时为5000毫秒
          config.setConnectionTimeoutInMillis(5000);
              
          // 设置Socket传输数据超时的时间为2000毫秒
          config.setSocketTimeout(2000);

          参数说明

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

          参数 说明
          CnameEnabled 使用cname访问BOS资源
          ConnectionTimeoutInMillis 建立连接的超时时间(单位:毫秒)
          Credentials 客户端用于签署HTTP请求的BCE凭据
          EnableHttpAsyncPut 异步put
          Endpoint 访问域名
          LocalAddress 本地地址
          MaxConnections 允许打开的最大HTTP连接数
          Protocol 连接协议类型
          ProxyDomain 访问NTLM验证的代理服务器的Windows域名
          ProxyHost 代理服务器主机地址
          ProxyPassword 代理服务器验证的密码
          ProxyPort 代理服务器端口
          ProxyPreemptiveAuthenticationEnabled 是否设置用户代理认证
          ProxyUsername 代理服务器验证的用户名
          ProxyWorkstation NTLM代理服务器的Windows工作站名称
          Region 地域
          RetryPolicy 连接重试策略
          SocketBufferSizeInBytes Socket缓冲区大小
          SocketTimeoutInMillis 通过打开的连接传输数据的超时时间(单位:毫秒)
          StreamBufferSize 流文件缓冲区大小
          UserAgent 用户代理,指HTTP的User-Agent头
          RedirectsEnabled 是否开启HTTP重定向。默认开启
          上一篇
          安装SDK工具包
          下一篇
          Bucket管理