下载文件(Object)时允许指定条件。满足条件则下载,不满足条件则返回错误且不下载。
下载早于指定时间修改的文件
以下代码用于下载早于指定时间修改的文件:
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() {
try {
// 向目标Bucket上传名为exampleobject.txt的文件,文件内容自定义。
await client.put("exampleobject.txt", Buffer.from("contenttest"));
// 在请求头If-Modified-Since中指定时间,如果指定的时间早于文件实际修改时间,则下载文件。
let result = await client.get("exampleobject.txt", {
headers: {
"If-Modified-Since": new Date("1970-01-01").toGMTString(),
},
});
console.log(result.content.toString() === "contenttest");
console.log(result.res.status === 200);
// 如果指定的时间等于或者晚于文件实际修改时间,则返回304 Not Modified。
result = await client.get("exampleobject.txt", {
headers: {
"If-Modified-Since": new Date().toGMTString(),
},
});
console.log(result.content.toString() === "");
console.log(result.res.status === 304);
} catch (e) {
console.log(e.code === "Not Modified");
}
}
main();
关于Bucket命名规范的详情,请参见存储空间(Bucket)。关于Object命名规范的详情,请参见对象(Object)。
下载不早于指定时间修改的文件
以下代码用于下载不早于(即等于或晚于)指定时间修改的文件:
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() {
// 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
let {res: {headers: {etag}}} = await client.put('exampleobject.txt', Buffer.from('contenttest'));
// 在请求头If-Match中传入ETag,如果传入的ETag和文件的ETag匹配,则下载文件。
let result = await client.get("exampleobject.txt", {
headers: {
"If-Match": etag,
},
});
console.log(result.content.toString() === "contenttest");
console.log(result.res.status === 200);
// 如果传入的ETag和文件的ETag不匹配,则返回412 Precondition Failed。
try {
await client.get("exampleobject.txt", {
headers: {
"If-Match": etag,
},
});
} catch (e) {
console.log(e.status === 412);
console.log(e.code === "PreconditionFailed");
}
}
main();
下载与指定ETag匹配的文件
ETag用于标识文件内容是否发生变化。以下代码用于下载与指定ETag匹配的文件:
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() {
// 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
let {res: {headers: {etag}}} = await client.put('exampleobject.txt', Buffer.from('contenttest'));
// 在请求头If-Match中传入ETag,如果传入的ETag和文件的ETag匹配,则下载文件。
let result = await client.get("exampleobject.txt", {
headers: {
"If-Match": etag,
},
});
console.log(result.content.toString() === "contenttest");
console.log(result.res.status === 200);
// 如果传入的ETag和文件的ETag不匹配,则返回412 Precondition Failed。
try {
await client.get("exampleobject.txt", {
headers: {
"If-Match": etag,
},
});
} catch (e) {
console.log(e.status === 412);
console.log(e.code === "PreconditionFailed");
}
}
main();
下载与指定ETag不匹配的文件
以下代码用于下载与指定ETag不匹配的文件:
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() {
try {
// 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
let {
res: {
headers: { etag },
},
} = await client.put("exampleobject.txt", Buffer.from("contenttest"));
// 通过在请求头If-None-Match中传入ETag,如果传入的ETag和文件的ETag不匹配,则下载文件。
let result = await client.get("exampleobject.txt", {
headers: {
"If-None-Match": etag,
},
});
console.log(result.content.toString() === "contenttest");
console.log(result.res.status === 200);
// 如果传入的ETag和文件的ETag匹配,则返回304 Not Modified。
result = await client.get("exampleobject.txt", {
headers: {
"If-None-Match": etag,
},
});
console.log(result.content.toString() === "");
console.log(result.res.status === 304);
} catch (e) {
console.log(e.code === "Not Modified");
}
}
main();
相关文档
关于限定条件下载的API接口说明,请参见GetObject。