本文介绍如何在上传、下载文件时,通过在请求中携带x-oss-traffic-limit参数并设置限速值,以保证其他应用的正常带宽。

简单上传下载限速

以下代码用于简单上传、下载文件时设置单链接限速:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

// 限速上传。
async function put() {
  const result = await client.putStream('<file name>', '<file stream>', {
    headers,
    timeout: 60000 // 默认超时时长为60000ms。超时直接报错,限速上传时注意修改超时时长。
  })
  console.log(result)
}
put()

// 限速下载。
async function get() {
  const result = await client.get('<file name>', {
    headers,
    timeout: 60000 // 默认超时时长为60000ms。超时直接报错,限速下载时注意修改超时时长。
  })
  console.log(result)
}
get()

使用签名URL方式上传下载限速

以下代码用于使用签名URL方式上传、下载文件时设置单链接限速:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

// 通过url query方式限速上传。
async function putByQuery() {
  const url = client.signatureUrl('<file name>', {
    trafficLimit: 8 * 1024 * 100, // 设置限速,最小100KB/s。
    method: 'PUT' // 设置put请求方法。
  })

  const result = await client.urllib.request(url, {
    method: 'PUT',
    stream: '<file stream>'
    timeout: 60000, // 默认超时时长为60000ms。限速后注意设置超时时长,否则请求失败。
  });

  console.log(result)
}
putByQuery()

// 通过url query方式限速下载。
async function getByQuery() {
  const url = client.signatureUrl('<file name>', {
    trafficLimit: 8 * 1024 * 100, // 设置限速,最小100KB/s。
  })

  const result = await client.urllib.request(url, {
    timeout: 60000, // 默认超时时长为60000ms。限速后注意设置超时时长,否则请求失败。
  });

  console.log(result)
}
getByQuery()