全部產品
Search
文件中心

Object Storage Service:Node.js禁止覆蓋同名檔案

更新時間:Nov 01, 2024

預設情況下,如果新添加檔案與現有檔案(Object)同名且對該檔案有存取權限,則新添加的檔案將覆蓋原有的檔案。本文介紹如何通過佈建要求頭x-oss-forbid-overwrite在簡單上傳、拷貝檔案及分區上傳等情境中禁止覆蓋同名檔案。

簡單上傳

以下代碼用於簡單上傳時禁止覆蓋同名檔案:

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,
  authorizationV4: true,
  // 填寫Bucket名稱。
  bucket: 'examplebucket'
});

// yourLocalFile填寫本地檔案完整路徑。
const file = "yourLocalFile";
// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
  "x-oss-forbid-overwrite": true,
};
async function put() {
  try {
    // yourObjectName填寫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({
  // 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,
  authorizationV4: true,
  // 填寫Bucket名稱。
  bucket: 'examplebucket'
});

// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
  "x-oss-forbid-overwrite": true,
};
// yourTargetObject填寫拷貝後目標Object完整路徑。
// yourSourceObject填寫待拷貝的源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({
  // 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,
  authorizationV4: true,
  // yourTargetBucket填寫拷貝後的目標Object所在的儲存空間名稱。
  bucket: "yourTargetBucket"
});

async function put() {
  try {
    const result = await client.multipartUploadCopy(
      // 填寫拷貝後的目標Object完整路徑。
      "yourTargetObject",
      {
        // 填寫待拷貝的源Object完整路徑。
        sourceKey: "yourSourceObject",
        // 填寫待拷貝的源Object所在的儲存空間名稱。
        sourceBucketName: "yourSourceBucket",
      },
      {
        // 指定拷貝檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
        headers: { "x-oss-forbid-overwrite": true },
      }
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

分區上傳

以下代碼用於分區上傳時禁止覆蓋同名檔案:

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,
  authorizationV4: true,
  // yourbucketname填寫儲存空間名稱。
  bucket: "yourBucketName",
});

// yourLocalFile填寫本地檔案完整路徑。
const file = "yourLocalFile";
// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
  "x-oss-forbid-overwrite": true,
};
{
  // 分區上傳。yourObjectName填寫Object的完整路徑。
  client    
    .multipartUpload("yourObjectName", file, { headers })
    .then((res) => {
      console.log(res);
    })
    .catch((e) => {
      console.log(e);
    });
}

相關文檔