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

Object Storage Service:オブジェクトが同じ名前のオブジェクトによって上書きされないようにする

最終更新日:Dec 18, 2023

既定では、既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、既存のオブジェクトはアップロードされたオブジェクトによって上書きされます。 このトピックでは、x-oss-forbid-overwriteリクエストヘッダーを設定して、オブジェクトをコピーするとき、または単純なアップロードまたはマルチパートアップロードを実行するときに、既存のオブジェクトが同じ名前のオブジェクトによって上書きされないようにする方法について説明します。

簡易アップロード

次のサンプルコードは、単純なアップロードを実行するときに、既存のオブジェクトが同じ名前のオブジェクトによって上書きされないようにする方法の例を示しています。

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

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

// ローカルファイルの名前を指定します。 
constファイル="yourLocalFile";
// 同じ名前の既存のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前の既存のオブジェクトを上書きしないことを指定します。 同じ名前のオブジェクトがバケットに存在する場合、OSSはエラーを返します。 
const headers = {
  "x-oss-forbid-overwrite": true、};
async関数put() {
  try {
    // オブジェクトのフルパスを指定します。 
    const result = await client.put("yourObjectName", file, { headers });
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

put(); 

オブジェクトのコピー

小さなオブジェクトをコピーするための上書きの無効化

次のサンプルコードでは、同じ名前の既存のオブジェクトを上書きせずに小さなオブジェクトをコピーする方法の例を示します。

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

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

// 同じ名前の既存のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前の既存のオブジェクトを上書きしないことを指定します。 同じ名前のオブジェクトがバケットに存在する場合、OSSはエラーを返します。 
const headers = {
  "x-oss-forbid-overwrite": true、};
// 宛先オブジェクトのフルパスを指定します。 
// ソースオブジェクトのフルパスを指定します。 
client  
  . コピー ("yourTargetObject" 、"yourSourceObject" 、{headers })
  . then((res) => {
    console.log(res.res.data.toString("utf8"));
    console.log(res);
  })
  . catch((e) => {
    console.log(e);
  });

ラージオブジェクトをコピーするための上書きの無効化

次のサンプルコードは、マルチパートコピーを使用してラージオブジェクトをコピーするときに、既存のオブジェクトが同じ名前のラージオブジェクトによって上書きされないようにする方法の例を示しています。

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

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

async関数put() {
  try {
    const result = await client.multipartUploadCopy ()
      // 宛先オブジェクトのフルパスを指定します。 
      "yourTargetObject" 、
      {
        // ソースオブジェクトのフルパスを指定します。 
        sourceKey: "yourSourceObject" 、
        // ソースバケットの名前を指定します。 
        sourceBucketName: "yourSourceBucket" 、
      },
      {
        // 既存のオブジェクトを同じ名前で上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前の既存のオブジェクトを上書きしないことを指定します。 同じ名前のオブジェクトがバケットに存在する場合、OSSはエラーを返します。 
        ヘッダー: { "x-oss-forbid-overwrite": true} 、
      }
    );
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

put(); 

マルチパートアップロード

次のサンプルコードは、マルチパートアップロードを使用して同じ名前のオブジェクトをアップロードするときに、既存のオブジェクトが上書きされないようにする方法の例を示しています。

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

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

// ローカルファイルの名前を指定します。 
constファイル="yourLocalFile";
// 同じ名前の既存のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前の既存のオブジェクトを上書きしないことを指定します。 同じ名前のオブジェクトがバケットに存在する場合、OSSはエラーを返します。 
const headers = {
  "x-oss-forbid-overwrite": true、};
{
  // マルチパートアップロードタスクを開始します。 // オブジェクトのフルパスを指定します。 
  client    
    . multipartUpload("yourObjectName" 、ファイル、{headers })
    . then((res) => {
      console.log(res);
    })
    . catch((e) => {
      console.log(e);
    });
}

参考資料

  • シンプルアップロードを実行するために呼び出すことができるAPI操作の詳細については、「PutObject」をご参照ください。

  • オブジェクトをコピーするために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。

  • マルチパートアップロードを実行するために呼び出すことができるAPI操作の詳細については、「InitiateMultipartUpload」および「CompleteMultipartUpload」をご参照ください。