日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Node.js拷貝文件

更新時(shí)間:

本文介紹如何將源Bucket中的文件(Object)復(fù)制到同一地域下相同或不同目標(biāo)Bucket中。

注意事項(xiàng)

  • 本文以華東1(杭州)外網(wǎng)Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產(chǎn)品訪問OSS,請(qǐng)使用內(nèi)網(wǎng)Endpoint。關(guān)于OSS支持的RegionEndpoint的對(duì)應(yīng)關(guān)系,請(qǐng)參見OSS訪問域名、數(shù)據(jù)中心、開放端口

  • 本文以從環(huán)境變量讀取訪問憑證為例。如何配置訪問憑證,請(qǐng)參見Java配置訪問憑證

  • 本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請(qǐng)參見新建OSSClient

  • 拷貝文件時(shí),您必須擁有源文件的讀權(quán)限及目標(biāo)Bucket的讀寫權(quán)限。

  • 拷貝文件時(shí),您需要確保源Bucket和目標(biāo)Bucket均未設(shè)置合規(guī)保留策略,否則報(bào)錯(cuò)The object you specified is immutable.

  • 不支持跨地域拷貝。例如不能將華東1(杭州)地域存儲(chǔ)空間中的文件拷貝到華北1(青島)地域。

拷貝小文件

您可以通過copy方法在同一個(gè)Bucket或者同一個(gè)Region下的不同Bucket之間拷貝文件,文件大小不能超過1 GB。

  • 同一個(gè)Bucket中拷貝文件

    以下代碼用于在同一個(gè)Bucket中拷貝文件。

    const OSS = require('ali-oss');
    const client = new OSS({
      // yourRegion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
      region: 'yourRegion',
      // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET。
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
      authorizationV4: true,
      // 填寫Bucket名稱。例如examplebucket。
      bucket: 'examplebucket',
      // 設(shè)置是否啟用HTTPS。設(shè)置securetrue時(shí),表示啟用。
      // secure: true
    })
    
    // 拷貝同一個(gè)Bucket中的文件。
    async function copySmallObjecInSameBucket() {
      try {
        // 填寫拷貝后和拷貝前的文件完整路徑。文件完整路徑中不能包含Bucket名稱。
        // 設(shè)置目標(biāo)文件的HTTP頭和自定義目標(biāo)文件的元數(shù)據(jù)。
        const result = await client.copy('destexampleobject.txt', 'srcexampleobject.txt', {
          // 指定headers參數(shù),設(shè)置目標(biāo)文件的HTTP頭。如果未指定headers參數(shù),則目標(biāo)文件與源文件的HTTP頭相同,即拷貝源文件的HTTP頭。
          headers: {
            'Cache-Control': 'no-cache',
            // 如果源ObjectETag值和您提供的ETag相等,則執(zhí)行拷貝操作,并返回200 OK。
            'if-match': '5B3C1A2E053D763E1B002CC607C5****',
            // 如果源ObjectETag值和您提供的ETag不相等,則執(zhí)行拷貝操作,并返回200 OK。
            'if-none-match': '5B3C1A2E053D763E1B002CC607C5****',
            // 如果指定的時(shí)間早于文件實(shí)際修改時(shí)間,則執(zhí)行拷貝操作,并返回200 OK。
            'if-modified-since': '2021-12-09T07:01:56.000Z',
            // 如果指定的時(shí)間晚于文件實(shí)際修改時(shí)間,則執(zhí)行拷貝操作,并返回200 OK。
            'if-unmodified-since': '2021-12-09T07:01:56.000Z',
            // 指定OSS創(chuàng)建目標(biāo)Object時(shí)的訪問權(quán)限,此處設(shè)置為private,表示只有Object的擁有者和授權(quán)用戶有該Object的讀寫權(quán)限,其他用戶沒有權(quán)限操作該Object。
            'x-oss-object-acl': 'private',
            // 指定Object的對(duì)象標(biāo)簽,可同時(shí)設(shè)置多個(gè)標(biāo)簽。
            'x-oss-tagging': 'Tag1=1&Tag2=2',
            // 指定CopyObject操作時(shí)是否覆蓋同名目標(biāo)Object。此處設(shè)置為true,表示禁止覆蓋同名Object。
            'x-oss-forbid-overwrite': 'true',
          },
          // 指定meta參數(shù),自定義目標(biāo)文件的元數(shù)據(jù)。如果未指定meta參數(shù),目標(biāo)文件與源文件的元數(shù)據(jù)相同,即拷貝源文件的元數(shù)據(jù)。
          meta: {
            location: 'hangzhou',
            year: 2015,
            people: 'mary',
          },
        });
        console.log(result);
      } catch (e) {
        console.log(e);
      }
    }
    
    copySmallObjecInSameBucket()
  • 同一Region下不同Bucket之間拷貝文件

    以下代碼用于在同一個(gè)Region下不同Bucket之間拷貝文件。

    const OSS = require('ali-oss');
    const client = new OSS({
    
      // yourRegion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
      region: 'yourRegion',
      // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET。
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
      authorizationV4: true,
      // 填寫目標(biāo)Bucket名稱。
      bucket: 'destexamplebucket',
    });
    
    async function copySmallObjectBetweenBuckets() {
      try {
        // 分別填寫拷貝后的文件名稱destobject.txt、拷貝前的文件名稱srcobject.txt以及拷貝前文件所屬的Bucket名稱。
        const result = await client.copy('destobject.txt', 'srcobject.txt', 'srcbucket', {
          // 指定headers參數(shù),設(shè)置目標(biāo)文件的HTTP頭。如果未指定headers參數(shù),則目標(biāo)文件與源文件的HTTP頭相同,即拷貝源文件的HTTP頭。
          headers: {
            'Cache-Control': 'no-cache',
          },
          // 指定meta參數(shù),自定義目標(biāo)文件的元數(shù)據(jù)。如果未指定meta參數(shù),目標(biāo)文件與源文件的元數(shù)據(jù)相同,即拷貝源文件的元數(shù)據(jù)。
          meta: {
            location: 'hangzhou',
            year: 2015,
            people: 'mary',
          },
        });
        console.log(result);
      } catch (e) {
        console.log(e);
      }
    }
    
    copySmallObjectBetweenBuckets()

拷貝大文件

對(duì)于大于1 GB文件,您可以使用multipartUploadCopy方法進(jìn)行分片拷貝。

以下代碼用于在同一個(gè)Region下不同Bucket之間拷貝文件。

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

const client = new OSS({
  // yourregion填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填寫目標(biāo)Bucket名稱。
  bucket: "destexamplebucket",
});

async function copyLargeObjectBetweenDifferentBuckets() {
  try {
    const copyheaders = {
      // 如果源Object的ETag值和用戶提供的ETag相等,則執(zhí)行拷貝操作;否則返回412 HTTP錯(cuò)誤碼(預(yù)處理失敗)。
      "x-oss-copy-source-if-match": "5B3C1A2E053D763E1B002CC607C5****",
      // 如果傳入的ETag值和Object的ETag不匹配,則執(zhí)行拷貝操作,并返回200 OK;否則返回304 Not Modified。  
      "x-oss-copy-source-if-none-match": "5B3C1A2E053D763E1B002CC607C5****",
      // 如果參數(shù)傳入的時(shí)間等于或者晚于文件實(shí)際修改時(shí)間,則執(zhí)行拷貝操作,并返回200 OK;否則返回412 precondition failed錯(cuò)誤。  
      "x-oss-copy-source-if-unmodified-since": "2022-12-09T07:01:56.000Z",
      // 如果指定的時(shí)間早于實(shí)際修改時(shí)間,則執(zhí)行拷貝操作,并返回200 OK;否則返回304 not modified。
      "x-oss-copy-source-if-modified-since": "2022-12-09T07:01:56.000Z",
    };

    const headers = {
      // 指定該Object被下載時(shí)的網(wǎng)頁的緩存行為。
      "Cache-Control": "no-cache",
      // 指定該Object被下載時(shí)的名稱。
      "Content-Disposition": "somename",
      // 指定該Object被下載時(shí)的內(nèi)容編碼格式。
      "Content-Encoding": "utf-8",
      // 指定過期時(shí)間,單位為毫秒。
      Expires: "1000",
    };

    let savedCpt;
    // 填寫拷貝后的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如destexampleobject1.txt。
    const r1 = await client.multipartUploadCopy("destexampleobject1.txt", {
      // 填寫拷貝前的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如srcexampleobject.txt。
      sourceKey: "srcexampleobject.txt",
      // 填寫源Bucket名稱,例如sourcebucket。  
      sourceBucketName: "sourcebucket",
      copyheaders: copyheaders,
    });
    console.log(r1);

    // 填寫拷貝后的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如destexampleobject2.txt。
    const r2 = await client.multipartUploadCopy("destexampleobject2.txt", {
      // 填寫拷貝前的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如srcexampleobject.txt。
      sourceKey: "srcexampleobject.txt",
      // 填寫源Bucket名稱,例如sourcebucket。
      sourceBucketName: "sourcebucket",
    }, {
      // 設(shè)置并行上傳的分片數(shù)量。
      parallel: 4,
      // 設(shè)置分片大小。
      partSize: 1024 * 1024,
      progress: function (p, cpt, res) {
        console.log(p);
        savedCpt = cpt;
        console.log(cpt);
        console.log(res.headers["x-oss-request-id"]);
      },
      headers: headers,
      copyheaders: copyheaders,
    });
    console.log(r2);

    // 填寫拷貝后的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如destexampleobject3.txt。
    const r3 = await client.multipartUploadCopy("destexampleobject3.txt", {
      // 填寫拷貝前的文件完整路徑,文件完整路徑中不能包含Bucket名稱,例如srcexampleobject.txt。
      sourceKey: "srcexampleobject.txt",
      // 填寫源Bucket名稱,例如sourcebucket。
      sourceBucketName: "sourcebucket",
    }, {
      checkpoint: savedCpt,
      progress: function (p, cpt, res) {
        console.log(p);
        console.log(cpt);
        console.log(res.headers["x-oss-request-id"]);
      },
    });
    console.log(r3);
  } catch (e) {
    console.log(e);
  }
}

copyLargeObjectBetweenDifferentBuckets()

相關(guān)文檔

  • 拷貝小文件

    • 關(guān)于拷貝小文件的完整示例代碼,請(qǐng)參見GitHub示例

    • 關(guān)于拷貝小文件的API接口說明,請(qǐng)參見CopyObject

  • 拷貝大文件

    • 關(guān)于拷貝大文件的完整示例代碼,請(qǐng)參見GitHub示例

    • 關(guān)于拷貝大文件的API接口說明,請(qǐng)參見UploadPartCopy