Node.js服务器,将PNG写入响应页面。

3

我正在使用node-png库生成png图像,并将其保存到本地目录,但是当我尝试重新打开它时,会显示该文件不存在。我希望能够读取数据并将其发送出去,或者只需在响应中发送一个带有图片的<img>字段。以下是目前的代码:

//write out img data
png.pack().pipe(dst);

//link to new image made
var link = fs.createReadStream('out.png'); //says that this does not exist

//write out response with img then delete file
response.writeHead(200, {"Content-Type": "image/png"});
response.end(link, 'binary');

dst 是否有一个可选的回调函数来表示它何时完成向磁盘写入操作? - Jason Aller
不,只有另外一个选项可以与它一起设置链接 - CRS
在执行任何操作之前,您始终可以等待流结束。event-stream模块具有through方法可实现此功能。 - tadman
@CRS你有考虑使用reader.pipe(writer, {end: false});选项吗?然后再跟着reader.on('end', function() {writer.end('Goodbye\n');});这个函数,看起来它的行为类似于回调函数。 - Jason Aller
1个回答

2
你是否可以完全跳过写入文件的步骤呢?
var output = png.pack();
res.setHeader('Content-Type', 'image/png');
output.pipe(res);

如果您确实需要同时将其写入磁盘,请参考此答案:

https://dev59.com/p2Ik5IYBdhLWcg3wI7AF#19561718

如果您需要先将其写入磁盘,然后再从中读取,则应执行以下操作:

var output = png.pack();
output.pipe(dst, { end: false });
output.on('end', function(){
     //Read your file and set your response here.
}

我没有测试过这些内容,但这是管道通常的工作方式。


1
如果我像 bufferStream.pipe(res); 这样返回图像流,该如何在前端渲染图像? - alexventuraio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接