简单获取对象

最近更新时间: 2024-06-12 15:06:00

适用场景

您可以直接发起请求获取 COS 中的对象,获取对象支持以下功能:

  • 获取完整的单个对象:直接发起 GET 请求即可获取完整的对象数据。

  • 获取单个对象的部分内容:可在 GET 请求中传入 Range 请求头部,支持检索一个特定的字节范围。不支持检索多个范围。

    对象的元数据将会作为 HTTP 响应头部随对象内容一同返回,GET 请求支持使用 URL 参数的方式覆盖响应的部分元数据值,例如 Content-Dispositon 的响应值。支持修改的响应头部包括:

  • Content-Type

  • Content-Language

  • Expires

  • Cache-Control

  • Content-Disposition

  • Content-Encoding

使用方法

使用 REST API

您可以直接使用 REST API 发起一个获取对象请求,可参考 GET Object 文档说明。

使用 Java SDK

对象存储 COS 的 Java SDK 中提供了此方法,可参考 Java SDK 接口文档 Get Object 部分。

步骤说明

  1. 初始化客户端 cosclient。

  2. 执行 getObject 方法获取输入流或者将内容保存到本地。

代码示例

  1. 以下代码演示了如何下载对象(无版本控制):

    // 1 初始化用户身份信息(appid, secretId, secretKey)  
    COSCredentials cred = new BasicCOSCredentials("1250000", "AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");  
    // 2 设置bucket的区域, COS地域的简称请参照 /document/product/436/6224
    ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));  
    // 3 生成cos客户端  
    COSClient cosclient = new COSClient(cred, clientConfig);
    // 设置bucket名  
    String bucketName = "mybucket";
    String key = "aaa.txt";
    
    try {
        // 下载文件  
        COSObject cosObject = cosclient.getObject(bucketName, key);
        // 获取输入流  
        COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
        // 关闭输入流  
        cosObjectInput.close();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }   
  2. GetObjectRequest 支持指定要从对象检索的数据字节范围,以下代码演示了指定字节的方法:

    // 1 初始化用户身份信息(appid, secretId, secretKey)  
    COSCredentials cred = new BasicCOSCredentials("1250000", "AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");    
    // 2 设置bucket的区域, COS地域的简称请参照 /document/product/436/6224
    ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));    
    // 3 生成cos客户端  
    COSClient cosclient = new COSClient(cred, clientConfig);
    // 设置bucket名
    String bucketName = "mybucket";
    String key = "aaa.txt";
    
    try {
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        // 设置下载前11个字节  
        getObjectRequest.setRange(0, 10);
        // 下载文件  
        COSObject cosObject = cosclient.getObject(bucketName, key);
        // 获取输入流  
        COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
        // 关闭输入流  
        cosObjectInput.close();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }   
  3. 检索对象时还可以用 ResponseHeaderOverrides 对象并设置相应的请求属性来替换响应头部值,以下是该方法的示例:

    // 1 初始化用户身份信息(appid, secretId, secretKey)   
    COSCredentials cred = new BasicCOSCredentials("1250000", "AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
    // 2 设置bucket的区域, COS地域的简称请参照 /document/product/436/6224  
    ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));  
    // 3 生成cos客户端  
    COSClient cosclient = new COSClient(cred, clientConfig);  
    // 设置bucket名  
    String bucketName = "mybucket";
    String key = "aaa.txt";
    
    try {
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides();
        String responseContentType="image/x-icon";
        String responseContentEncoding = "gzip,deflate,compress";
        String responseContentLanguage = "zh-CN";
        String responseContentDispositon = "filename=\"abc.txt\"";
        String responseCacheControl = "no-cache";
        String expireStr = DateUtils.formatRFC822Date(new Date(System.currentTimeMillis() + 24 * 3600 * 1000));
        responseHeaders.setContentType(responseContentType);
        responseHeaders.setContentEncoding(responseContentEncoding);
        responseHeaders.setContentLanguage(responseContentLanguage);
        responseHeaders.setContentDisposition(responseContentDispositon);
        responseHeaders.setCacheControl(responseCacheControl);
        responseHeaders.setExpires(expireStr);
        getObjectRequest.setResponseHeaders(responseHeaders);
        // 下载文件
        COSObject cosObject = cosclient.getObject(bucketName, key);
        // 获取输入流
        COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
        // 关闭输入流
        cosObjectInput.close();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }