我在节点6.9.0上使用“express”:“^ 4.13.3”
当我尝试管道数据jpeg图像时:
const path = config.storageRoot + '/' + req.params.originalFileName;
var mimetype = mime.lookup(req.params.originalFileName);
res.writeHead(200, { 'Content-Type': mimetype});
fs.createReadStream(path).pipe(res);
我在结果中获得了xml数据:
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.5-c014 79.151739, 2013/04/03-12:12:15 ">
当我使用res.end
代替fs.readFile
的结果时,二进制内容的格式正确。
我做错了什么?
答案 0 :(得分:0)
看看我在这个答案的示例中如何管道文件:
这是这样的:
// 'type' is the MIME type
var s = fs.createReadStream(file);
s.on('open', function () {
res.set('Content-Type', type);
s.pipe(res);
});
s.on('error', function () {
res.set('Content-Type', 'text/plain');
res.status(404).end('Not found');
});
所以我只是将标题设置为由Express发布而不是明确地发布标题。我也正在处理流事件。根据特拉维斯的说法,也许你应该尝试类似的方式,因为我这样做的方式似乎有效。
除了处理流事件和错误之外,另一件事是确保您拥有正确的编码,权限等。我不知道您期望什么结果以及XML的含义或来源,但处理流事件可能会告诉您更多有关正在发生的事情。