【发布时间】:2015-03-31 17:44:54
【问题描述】:
我有一个 nodejs 应用程序,它调用一个返回图像片段的服务器。我正在尝试将此段保存在缓冲区中,以便以后可以将它们合并在一起以制作完整图像
var req = http.request(options, function(res) {
var segment = parseInt(res.headers["segment"]);
res.setEncoding('binary');
var data = "";
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
images[segment] = (new Buffer(data, 'binary'));
});
});
在我得到所有片段之后
var totalImage = "";
for (image in images) {
totalImage += image.toString('binary');
}
fs.writeFile('image.png', totalImage, function(e) {
console.log('done');
});
我想使用 node-pngjs,但我不确定如何将响应二进制流式传输到 png 中,以便我可以保存像素缓冲区而不是二进制本身以供以后使用
我尝试执行以下操作:
res.pipe(new PNG()).on('parse', function(err, data) {
buffers[segment] = data;
});
但这会导致解析过程中出现错误“文件签名无效”
【问题讨论】:
-
我认为您需要展示更多代码,包括如何管理
buffers变量、索引i以及如何将所有数据写入文件。现在,您没有展示足够多的代码让我们了解您如何收集每个部分以及如何将所有部分写入文件。 -
如果我是你,我会在你的请求处理程序中添加一个
console.log(segment),以确保段号正确地出现在你的标题中。然后,您需要查看响应是否实际上是二进制(不是以其他方式编码),您可以通过查看 Chrome 调试器的网络标记中的响应和标头来做到这一点。
标签: node.js