すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:条件付きダウンロード (Node.js SDK)

最終更新日:Nov 30, 2025

オブジェクトをダウンロードする際に条件を指定できます。指定した条件が満たされた場合にのみオブジェクトがダウンロードされ、条件が満たされない場合はエラーが返されます。

指定した時間より前に変更されたオブジェクトのダウンロード

次のサンプルコードは、指定した時間より前に変更されたオブジェクトをダウンロードする方法の例を示しています。

const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、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,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'examplebucket'
});

async function main() {
  try {
    // 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();

バケットの命名規則の詳細については、「バケット」をご参照ください。 オブジェクトの命名規則の詳細については、「オブジェクト」をご参照ください。

指定した時間以降に変更されたオブジェクトのダウンロード

次のサンプルコードは、指定した時間以降に変更されたオブジェクトをダウンロードする方法の例を示しています。

const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、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,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'examplebucket'
});

async function main() {
  // 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 を使用して、オブジェクトの内容が変更されたかどうかを確認できます。 次のサンプルコードは、ETag が指定した ETag 値と一致するオブジェクトをダウンロードする方法の例を示しています。

const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、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,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'examplebucket'
});

async function main() {
  // 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 が指定した ETag 値と一致しないオブジェクトをダウンロードする方法の例を示しています。

const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、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,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'examplebucket'
});

async function main() {
  try {
    // 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」をご参照ください。