如果僅需要檔案(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。