全部产品
Search
文档中心

对象存储 OSS:Node.js单链接限速

更新时间:Oct 31, 2024

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

简单上传下载限速

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

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'
});

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

// 限速上传。
async function put() {
  // 文件路径。
  const filePath = 'D:\\localpath\\examplefile.txt'; 
  // 创建文件流对象。
  const fileStream = fs.createReadStream(filePath); 
  const result = await client.putStream('file-name', fileStream, {
    // 正确设置请求头。
    headers, 
    // 默认超时时长为60000 ms。超时直接报错,限速上传时注意修改超时时长。
    timeout: 60000 
  });
  console.log(result);
}

put()

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

get()

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

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

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',
});

// 通过URL Query方式限速上传。
async function putByQuery() {
  const url = client.signatureUrl('file name', {
    // 设置限速,最小为100 KB/s。
    trafficLimit: 8 * 1024 * 100, 
    // 设置PUT请求方法。
    method: 'PUT' 
  })
  // 设置文件路径。
  const filePath = 'D:\\localpath\\examplefile.txt'; 
  // 创建文件流对象。
  const fileStream = fs.createReadStream(filePath); 
  const result = await client.urllib.request(url, {
    method: 'PUT',
    // 使用文件流对象作为参数。
    stream: fileStream, 
    // 默认超时时长为60000 ms。限速后注意设置超时时长,否则请求失败。
    timeout: 60000, 
  });

  console.log(result)
}

putByQuery()

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

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

  console.log(result)
}

getByQuery()

相关文档

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