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

简单上传下载限速

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

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeySecret',
  // yourbucketname填写存储空间名称。
  bucket: 'yourbucketname'
});

// 通过请求头设置限速。
const headers = {  
 'x-oss-traffic-limit': 8 * 1024 * 100 // 设置限速,最小为100 KB/s。
}

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

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

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

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

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeySecret',
  // yourbucketname填写存储空间名称。
  bucket: 'yourbucketname'
});

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

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

  console.log(result)
}
putByQuery()

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

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

  console.log(result)
}
getByQuery()

相关文档

关于单链接限速的完整示例代码,请参见GitHub示例