简单获取对象

最近更新时间: 2024-10-17 17:10: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();
}   
  1. 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();
}   
  1. 检索对象时还可以用 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();
}