全部產品
Search
文件中心

Object Storage Service:Node.js要求者付費模式

更新時間:Oct 29, 2024

要求者付費模式是指由要求者支付讀取儲存空間(Bucket)內資料時產生的流量費用和請求費用,而Bucket擁有者僅支付儲存費用。當您希望共用資料,但又不希望產生流量費用和請求費用時,您可以開啟此功能。

佈建要求者付費模式

以下代碼用於佈建要求者付費模式。

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名稱。
  bucket: 'yourBucketName',

});

async function setBucketRequestPayment(bucket, Payer) {
  try {
    // bucket填寫需要佈建要求者付費模式的儲存空間名稱。
    // Payer取值為Requester或BucketOwner。
    // Payer設定為Requester,表明該儲存空間已開啟要求者付費模式,由要求者支付讀取儲存空間(Bucket)內資料時產生的流量費用和請求費用。
    // Payer設定為BucketOwner,表明該儲存空間不開啟要求者付費模式(預設狀態),即請求產生的費用由資料擁有者(BucketOwner)來支付。
    const result = await client.putBucketRequestPayment(bucket, Payer);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

setBucketRequestPayment('bucketName', 'Requester')

擷取要求者付費模式配置

以下代碼用於擷取要求者付費模式配置資訊。

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名稱。
  bucket: 'yourBucketName',
});

async function getBucketRequestPayment(bucket) {
  try {
    // 擷取儲存空間要求者付費模式配置資訊。
    const result = await client.getBucketRequestPayment(bucket);
    console.log(result.payer);
  } catch (e) {
    console.log(e);
  }
}

getBucketRequestPayment('bucketName')

第三方付費訪問Object

第三方操作Object時需在HTTP Header中攜帶x-oss-request-payer:requester參數,否則會報錯。

以下代碼以PutObject、GetObject和DeleteObject為例,用於指定第三方付費訪問Object。其他用於指定第三方付費的Object讀寫操作介面設定方法類似。

以下代碼用於設定第三方付費訪問Object。

const OSS = require('ali-oss');
const bucket = 'bucket-name';
const payer = 'Requester';

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名稱。
  bucket: 'yourBucketName',

});

async function main() {
  await put();
  await get();
  await del();
}

async function put() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // PutObject介面指定付費者。
  const response = await client.put('fileName', path.normalize('D:\\localpath\\examplefile.txt'), {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('put:', response);
}

async function get() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // GetObject介面指定付費者。
  const response = await client.get('fileName', {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('get:', response);
}

async function del() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // DeleteObject介面指定付費者。
  const response = await client.delete('fileName', {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('delete:', response);
}

main();

相關文檔