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

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

最終更新日:Nov 08, 2024

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

簡易アップロード

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

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

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: 'examplebucket'
});

// Specify the name of the local file. 
const file = "yourLocalFile";
// Specify whether to overwrite an existing object with the same name. In this example, this parameter is set to true, which specifies that the operation does not overwrite an existing object that has the same name. If an object with the same name exists in the bucket, OSS returns an error. 
const headers = {
  "x-oss-forbid-overwrite": true,
};
async function put() {
  try {
    // Specify the full path of the object. 
    const result = await client.put("yourObjectName", file, { headers });
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

オブジェクトのコピー

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

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

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

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: 'examplebucket'
});

// Specify whether to overwrite an existing object with the same name. In this example, this parameter is set to true, which specifies that the operation does not overwrite an existing object that has the same name. If an object with the same name exists in the bucket, OSS returns an error. 
const headers = {
  "x-oss-forbid-overwrite": true,
};
// Specify the full path of the destination object. 
// Specify the full path of the source object. 
client  
  .copy("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({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: "yourRegion",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the destination bucket. 
  bucket: "yourTargetBucket"
});

async function put() {
  try {
    const result = await client.multipartUploadCopy(
      // Specify the full path of the destination object. 
      "yourTargetObject",
      {
        // Specify the full path of the source object. 
        sourceKey: "yourSourceObject",
        // Specify the name of the source bucket. 
        sourceBucketName: "yourSourceBucket",
      },
      {
        // Specify whether to overwrite the existing object with the same name. In this example, this parameter is set to true, which specifies that the operation does not overwrite an existing object that has the same name. If an object with the same name exists in the bucket, OSS returns an error. 
        headers: { "x-oss-forbid-overwrite": true },
      }
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

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

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

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

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: "yourRegion",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: "yourBucketName",
});

// Specify the name of the local file. 
const file = "yourLocalFile";
// Specify whether to overwrite an existing object with the same name. In this example, this parameter is set to true, which specifies that the operation does not overwrite an existing object that has the same name. If an object with the same name exists in the bucket, OSS returns an error. 
const headers = {
  "x-oss-forbid-overwrite": true,
};
{
  // Start the multipart upload task. // Specify the full path of the object. 
  client    
    .multipartUpload("yourObjectName", file, { headers })
    .then((res) => {
      console.log(res);
    })
    .catch((e) => {
      console.log(e);
    });
}

関連ドキュメント

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

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

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