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

Node.js使用axios下载URL视频并存为二进制变量的问题咨询

问题根因

你当前代码无法拿到二进制内容的核心原因:

  • 配置responseType: 'stream'时,videoResponse.data返回的是Node.js可读流(Readable Stream)实例,直接await该实例不会自动拼接流内的二进制数据,因此拿到的是流对象而非目标二进制内容。
  • 若调用pipe方法提示不存在,通常是axios版本兼容问题,或未正确取到流实例本身。
可用方案

方案1:直接获取二进制Buffer(无流处理需求优先选)

如果不需要边下载边做流处理(比如进度监听、实时转码),完全没必要使用stream响应类型,直接将responseType设为arraybuffer即可,axios会自动将响应内容组装为二进制格式,代码最简:

const videoResponse = await axios({
    method: 'GET',
    url: url,
    responseType: 'arraybuffer',
});
// video即为完整的视频二进制Buffer对象,可直接存入变量使用
const video = Buffer.from(videoResponse.data);

方案2:必须使用stream响应时,手动拼接流数据

如果确实需要使用stream模式,不能直接await流对象,需要手动监听流事件收集所有数据块,最终拼接为完整二进制:

const videoResponse = await axios({
    method: 'GET',
    url: url,
    responseType: 'stream',
});
const readableStream = videoResponse.data;
const chunks = [];

readableStream.on('data', (chunk) => {
    chunks.push(chunk);
});

const video = await new Promise((resolve, reject) => {
    readableStream.on('end', () => {
        // 拼接所有数据块为完整二进制Buffer
        resolve(Buffer.concat(chunks));
    });
    readableStream.on('error', reject);
});

提示:如果下载的视频体积较大(单文件超过500MB),不建议将完整二进制内容存在内存变量中,会占用大量进程内存,优先使用pipe方法将流直接写入本地文件,降低内存开销。

内容的提问来源于stack exchange,提问作者Mr.Grease

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:27:19