全部產品
Search
文件中心

Object Storage Service:Node.js限定條件下載

更新時間:Feb 28, 2024

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