全部產品
Search
文件中心

Object Storage Service:Node.js範圍下載

更新時間:Feb 28, 2024

如果僅需要檔案(Object)中的部分資料,您可以使用範圍下載,下載指定範圍內的資料。

指定正常的下載範圍

當您指定的範圍首端和末端都在檔案的有效區間內,則按指定區間正常下載檔案。例如現有大小為1000位元組的Object,則指定的有效區間應為0~999。

以下代碼用於指定正常的下載範圍來下載檔案:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourRegion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填寫Bucket名稱。
  bucket: 'examplebucket'
});

async function main() {
  const start = 1, end = 900;
  // yourObjectName表示不包含Bucket名稱在內的Object的完整路徑,例如destfolder/examplefile.txt。
  // 擷取目標Object的1~900位元組範圍內的資料,包含1和900,共900位元組的資料。
  // 如果指定範圍的首端或末端不在有效區間,則下載整個檔案的內容,返回HTTP Code為200。
  const result = await client.get("<yourObjectName>", {
    headers: {
      Range: `bytes=${start}-${end}`,
    },
  })
  console.log(result.content.toString())
};

main();

關於Bucket命名規範的詳情,請參見儲存空間(Bucket)。關於Object命名規範的詳情,請參見對象(Object)

標準行為範圍下載

通過在請求中增加要求標頭x-oss-range-behavior:standard,改變指定範圍不在有效區間時OSS的下載行為。

以下代碼用於標準行為範圍下載:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourRegion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填寫Bucket名稱。
  bucket: 'examplebucket'
});

async function main() {
  // 上傳大小為10位元組的檔案exampleobject.txt。
  const buf = Buffer.from("abcdefghij");
  await client.put("exampleobject.txt", buf);
  const result = await client.get("exampleobject.txt", {
  // 指定Range: bytes=5-15,此時範圍末端取值不在有效區間,返回6~10位元組範圍內容,且HTTP Code為206。
    headers: {
      Range: "bytes=5-15",      
      "x-oss-range-behavior": "standard",
    },
  });
  console.log(result.content.toString() === 'fghij')
  console.log(result.res.status === 206)
  try{
    await client.get("exampleobject.txt", {
      // 指定Range: bytes=15-25,此時範圍首端取值不在有效區間,返回HTTP Code為416,錯誤碼為InvalidRange。
      headers: {
        Range: "bytes=15-25",        
        "x-oss-range-behavior": "standard",
      },
    })
  }catch(e) {
    console.log(e.status === 416);
    console.log(e.name === 'InvalidRangeError')
  }
}

main();

相關文檔

關於範圍下載的API介面說明,請參見GetObject