下載檔案(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。