直接从文件系统管道文件

时间:2017-03-01 15:24:14

标签: node.js express

我在节点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的结果时,二进制内容的格式正确。

我做错了什么?

1 个答案:

答案 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的含义或来源,但处理流事件可能会告诉您更多有关正在发生的事情。