全部產品
Search
文件中心

Object Storage Service:範圍下載

更新時間:Aug 30, 2018

如果僅需要檔案中的部分資料,您可以使用範圍下載,下載指定範圍內的資料,代碼如下:

  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();