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

Node.js v6.11环境下如何从URL获取图片数据为Buffer?

在Node.js v6.11中用request模块获取图片Buffer的解决方案

嘿,太懂你维护老Node.js项目的痛苦了——高版本的fetch、axios这些好用的模块没法用,只能抱着request模块啃对吧?我之前在维护v6.x的项目时也碰到过一模一样的问题,给你分享两种靠谱的解决方式:

方法一:直接通过request回调获取Buffer

核心是设置encoding: null,这样request就不会把响应体转成字符串,直接返回原始的Buffer对象:

const request = require('request');
const fs = require('fs');

const imageURL = '你的目标图片地址';

request({ url: imageURL, encoding: null }, (err, res, body) => {
  if (err) {
    console.error('请求图片失败:', err);
    return;
  }
  // body 就是你要的图片Buffer!
  console.log('获取到图片Buffer,大小:', body.length + '字节');
  
  // 如果需要保存到文件,直接写Buffer就行,不用指定'binary'编码
  fs.writeFile('downloaded-img.jpg', body, (writeErr) => {
    if (writeErr) throw writeErr;
    console.log('图片已保存');
  });
});

你之前尝试的第二个写法没拿到正确Buffer,大概率是因为没设置encoding: null——默认情况下request会把响应体转成UTF-8字符串,这样存成图片肯定会损坏。

方法二:通过流式方式收集Buffer(适合大图片)

如果图片比较大,一次性加载到内存可能有压力,用stream分块收集再拼接成Buffer更稳妥:

const request = require('request');
const fs = require('fs');

const imageURL = '你的目标图片地址';
const chunkList = [];

request(imageURL)
  .on('data', (chunk) => {
    chunkList.push(chunk); // 收集每个数据块
  })
  .on('end', () => {
    const imageBuffer = Buffer.concat(chunkList); // 拼接所有块成完整Buffer
    console.log('流式获取Buffer完成,大小:', imageBuffer.length + '字节');
    
    fs.writeFile('downloaded-img-stream.jpg', imageBuffer, (writeErr) => {
      if (writeErr) throw writeErr;
      console.log('流式下载的图片已保存');
    });
  })
  .on('error', (err) => {
    console.error('流式请求出错:', err);
  });

关键注意事项

一定要安装兼容Node.js v6.11的request版本,最新版request已经不支持v6了,所以安装时指定版本:

npm install request@2.88.2

这个版本是经过验证可以在v6.11上稳定运行的。

内容的提问来源于stack exchange,提问作者Ihab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:15:14