全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
对象存储 OSS

范围下载

更新时间:2018-07-02 14:22:17

如果仅需要文件中的部分数据,您可以使用范围下载,下载指定范围内的数据,代码如下:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. String objectName = "<yourObjectName>";
  8. // 创建OSSClient实例。
  9. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  10. GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
  11. // 获取0~1000字节范围内的数据,包括0和1000,共1001个字节的数据。如果指定的范围无效(比如开始或结束位置的指定值为负数,或指定值大于文件大小),则下载整个文件。
  12. getObjectRequest.setRange(0, 1000);
  13. // 范围下载。
  14. OSSObject ossObject = ossClient.getObject(getObjectRequest);
  15. // 读取数据。
  16. byte[] buf = new byte[1024];
  17. InputStream in = ossObject.getObjectContent();
  18. for (int n = 0; n != -1; ) {
  19. n = in.read(buf, 0, buf.length);
  20. }
  21. // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
  22. in.close();
  23. // 关闭OSSClient。
  24. ossClient.shutdown();

流式读取一次可能无法读取全部数据。如果您需要流式读取64KB的数据,请使用如下的方式多次读取,直到读取到64KB或者文件结束。详情请参见InputStream.read

  1. byte[] buf = new byte[1024];
  2. InputStream in = ossObject.getObjectContent();
  3. for (int n = 0; n != -1; ) {
  4. n = in.read(buf, 0, buf.length);
  5. }
  6. in.close();
本文导读目录