我使用此代码将图像传送给我的客户:
req.pipe(fs.createReadStream(__dirname+'/imgen/cached_images/' + link).pipe(res))
确实工作但有时图片不会完全转移。但是在客户端(浏览器)和服务器端(node.js)都没有抛出任何错误。
我的第二次尝试是
var img = fs.readFileSync(__dirname+'/imgen/cached_images/' + link);
res.writeHead(200, {
'Content-Type' : 'image/png'
});
res.end(img, 'binary');
但它会导致同样奇怪的行为......
有没有人为我提供线索?
(抽象代码......)
var http = require('http');
http.createServer(function (req, res) {
Imgen.generateNew(
'virtualtwins/www_leonardocampus_de/overview/28',
'www.leonardocampus.de',
'overview',
'28',
null,
[],
[],
function (link) {
fs.stat(__dirname+'/imgen/cached_images/' + link, function(err, file_info) {
if (err) { console.log('err', err); }
console.log('file info', file_info.size);
res.writeHead(200, 'image/png');
fs.createReadStream(__dirname+'/imgen/cached_images/' + link).pipe(res);
});
}
);
}).listen(13337, '127.0.0.1');
Imgen.generateNew
只需创建一个新文件,将其保存到磁盘并返回路径(链接)。
答案 0 :(得分:2)
我之前使用过这个,所需要的只是function (req, res) {
:
var path = ...;
res.writeHead(200, {
'Content-Type' : 'image/png'
});
fs.createReadStream(path).pipe(res);
其中path
是要发送的文件的计算路径。 .pipe()
将数据从读取流传输到写入流,并在读取流结束时调用结束,因此无需在{。}之后使用res.end()
。
答案 1 :(得分:2)
问题是什么:我有两个不同的writeStreams!如果WriteStream#1关闭,第二个也应关闭,然后全部应该通过管道传输。
但是节点是异步的,所以当一个节点已经关闭时,另一个节点却没有。甚至stream.end()都被调用了......你总是应该等待关闭事件!