You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Axios流的分块大小?

如何修改Axios流的分块大小?

嘿,你的当前代码能正常工作很棒!不过要直接让Axios调整流的分块大小,其实Axios本身并没有提供现成的配置项——因为这个分块大小本质上是由Node.js底层的HTTP模块(Axios在Node环境下默认用它)或者服务器端发送的响应分块来决定的。不过别担心,我们有两种靠谱的方法来实现你想要的效果:

方法一:通过自定义Transform流重新分块

既然Axios返回的data是标准的Node.js Readable流,我们可以自己写一个Transform流,把原流的块重新拆分成你指定大小的块,再pipe到目标流。这种方法灵活度高,不需要改动Axios的核心配置:

const { Transform } = require('stream');

// 创建自定义分块的Transform流,这里设置分块大小为1KB(1024字节)
const chunker = new Transform({
  readableObjectMode: false,
  writableObjectMode: false,
  transform(chunk, encoding, callback) {
    const targetChunkSize = 1024; // 你可以修改这个值来调整分块大小
    let offset = 0;
    while (offset < chunk.length) {
      this.push(chunk.slice(offset, offset + targetChunkSize));
      offset += targetChunkSize;
    }
    callback();
  }
});

// 修改你的请求代码,把原流先经过chunker再导向目标流
const { status, headers, data } = await axios(config);
data.pipe(chunker).pipe(streamTarget);

方法二:修改Axios底层HTTP请求的highWaterMark

如果希望从底层请求接收环节就控制块大小,可以通过自定义Axios的adapter来修改HTTP请求的highWaterMark参数(这个参数控制Node.js HTTP模块接收数据的缓冲区大小):

const axios = require('axios');
const http = require('http');
const https = require('https');

// 自定义adapter,调整请求的highWaterMark
const customAdapter = (config) => {
  const agent = config.url.startsWith('https') ? https : http;
  return new Promise((resolve, reject) => {
    const req = agent.request({
      ...config,
      highWaterMark: 2048, // 设置你想要的缓冲区大小,单位字节
    }, (res) => {
      // 包装成Axios要求的响应格式
      const response = {
        status: res.statusCode,
        statusText: res.statusMessage,
        headers: res.headers,
        config: config,
        request: req,
        data: res
      };
      resolve(response);
    });

    req.on('error', reject);
    req.end();
  });
};

// 创建使用自定义adapter的Axios实例
const axiosInstance = axios.create({ adapter: customAdapter });

// 用这个实例发起请求
const { status, headers, data } = await axiosInstance(config);
data.pipe(streamTarget);

注意:第二种方法的效果可能受服务器端发送的分块大小限制,如果服务器强制用特定大小发送数据,这个设置可能不会完全生效,但大多数场景下能满足需求。

备注:内容来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:08:06