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

Object Storage Service:条件付きダウンロード

最終更新日:Dec 18, 2023

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

指定された時刻より前に変更されたオブジェクトをダウンロードする

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

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  リージョン: 'yourRegion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'examplebucket'
});

async関数main() {
  try {
    // exampleobject.txtという名前のオブジェクトをアップロードします。 
    wait client.put("exampleobject.txt" 、Buffer.from("contenttest"));
    // リクエストにIf-Modified-Sinceヘッダーを設定します。 このヘッダーの値が、アップロードされたオブジェクトが最後に変更された時刻より前の場合、オブジェクトがダウンロードされます。 
    let result = await client.get("exampleobject.txt", {
      ヘッダー:{
        "If-Modified-Since": new Date("1970-01-01").toGMTString(),
      },
    });
    console.log(result.content.toString() === "contenttest");
    console.log(result.res.status === 200);

    // If-Modified-Sinceヘッダーの値が、アップロードされたオブジェクトが最後に変更された時刻と同じかそれ以降の場合、OSSはNot modified 304を返します。 
    result = await client.get("exampleobject.txt", {
      ヘッダー:{
        "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");
  }
}

メイン (); 

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

指定された時刻より前に変更されたオブジェクトをダウンロードする

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

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  リージョン: 'yourRegion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'examplebucket'
});

async関数main() {
  // exampleobject.txtという名前のオブジェクトをアップロードします。 
  await client.put('exampleobject.txt ', Buffer.from('contenttest'))

  // リクエストにIf-Unmodified-Sinceヘッダーを設定します。 このヘッダーの値が、アップロードされたオブジェクトが最後に変更された時刻と同じかそれ以降の場合、オブジェクトはダウンロードされます。 
  let result = await client.get("exampleobject.txt", {
    ヘッダー:{
      "If-Unmodified-Since": new Date().toGMTString(),
    },
  });
  console.log(result.content.toString() === "contenttest");
  console.log(result.res.status === 200);

  // If-Unmodified-Sinceヘッダーの値が、アップロードされたオブジェクトが最後に変更された時刻より前の場合、OSSは412 Precondition Failedを返します。 
  try {
    await client.get("exampleobject.txt", {
      ヘッダー:{
        "If-Unmodified-Since": new Date().toGMTString(),
      },
    });
  } catch (e) {
    console.log(e.status === 412);
    console.log(e.code === "PreconditionFailed");
  }
}

メイン (); 

ETagが指定されたETag値と一致するオブジェクトをダウンロードする

オブジェクトのETagを使用して、オブジェクトのコンテンツが変更されたかどうかを確認できます。 次のサンプルコードは、ETagが指定されたETag値と一致するオブジェクトをダウンロードする方法の例を示しています。

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  リージョン: 'yourRegion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'examplebucket'
});

async関数main() {
  // exampleobject.txtという名前のオブジェクトをアップロードし、オブジェクトのETagを取得します。 
  await client.put('exampleobject.txt ', Buffer.from('contenttest'))

  // If-MatchヘッダーをETag値に設定します。 指定されたETag値がオブジェクトのETagと一致する場合、オブジェクトがダウンロードされます。 
  let result = await client.get("exampleobject.txt", {
    ヘッダー:{
      "If-Unmodified-Since": new Date().toGMTString(),
    },
  });
  console.log(result.content.toString() === "contenttest");
  console.log(result.res.status === 200);

  // 指定されたETag値がオブジェクトのETagと一致しない場合、OSSは412 Precondition Failedを返します。 
  try {
    await client.get("exampleobject.txt", {
      ヘッダー:{
        "If-Unmodified-Since": new Date().toGMTString(),
      },
    });
  } catch (e) {
    console.log(e.status === 412);
    console.log(e.code === "PreconditionFailed");
  }
}

メイン (); 

ETagが指定されたETag値と一致しないオブジェクトをダウンロードする

次のサンプルコードは、ETagが指定されたETag値と一致しないオブジェクトをダウンロードする方法の例を示しています。

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  リージョン: 'yourRegion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'examplebucket'
});

async関数main() {
  try {
    // exampleobject.txtという名前のオブジェクトをアップロードし、オブジェクトのETagを取得します。 
    let {
      res: {
        ヘッダー: { etag} 、
      },
    } = await client.put("exampleobject.txt", Buffer.from("contenttest"));

    // If-MatchヘッダーをETag値に設定します。 指定されたETag値がオブジェクトのETagと一致しない場合、オブジェクトはダウンロードされます。 
    let result = await client.get("exampleobject.txt", {
      ヘッダー:{
        「If-None-Match」: etag、
      },
    });
    console.log(result.content.toString() === "contenttest");
    console.log(result.res.status === 200);

    // 指定されたETag値がオブジェクトのETagと一致する場合、OSSは304 Not Modifiedを返します。 
    result = await client.get("exampleobject.txt", {
      ヘッダー:{
        「If-None-Match」: etag、
      },
    });
    console.log(result.content.toString() === "");
    console.log(result.res.status === 304);
  } catch (e) {
    console.log(e.code === "Not Modified");
  }
}

メイン (); 

参考資料

条件付きダウンロードを実行するために呼び出すことができるAPI操作の詳細については、「GetObject」をご参照ください。