如何在Node.js中使用HTTPS模块获取Array Buffer格式的响应体?
使用Node.js原生https模块获取图片并转为ArrayBuffer
你当前的问题在于将二进制响应数据转成了字符串拼接,这会破坏图片的二进制信息,导致后续无法正确还原成ArrayBuffer。正确的做法是直接收集Buffer块,再合并后转换为ArrayBuffer。
修正后的代码
const https = require('https'); const request = https.request('https://placehold.co/600x400', (response) => { const chunks = []; response.on('data', (chunk) => { chunks.push(chunk); // 直接收集Buffer块,不转字符串 }); response.on('end', () => { // 合并所有Buffer块成一个大Buffer const buffer = Buffer.concat(chunks); // 将Buffer转换为ArrayBuffer(避免包含Buffer额外分配的内存) const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.length); console.log(arrayBuffer); }); }); request.end();
为什么之前的方法无效?
- 图片是二进制数据,你将
chunk转成UTF-8字符串时,很多字节无法被UTF-8正确解析,会被替换成占位符(比如�),导致原始数据永久丢失。 Buffer.from(data, 'utf-8')和TextEncoder.encode(data)都是基于损坏后的字符串操作,自然无法还原出正确的二进制数据。
内容的提问来源于stack exchange,提问作者Anatol Zakrividoroga
相关产品推荐
相关产品推荐

