如果仅需要文件(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。
文档内容是否对您有帮助?