对象存储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头
    上一篇
    安装SDK工具包
    下一篇
    Bucket管理