使用node.js读取文件并将服务输出作为HTTP响应表达式的文件大小限制?

时间:2016-10-21 01:12:40

标签: javascript node.js express

我有node.js和expressjs的以下代码:

app.get('/api/csv/:filename', function (req, res) {
    var fs = require('fs');
    var csvData = fs.readFileSync("public/uploads/"+req.params.filename, 'utf8');
    res.send(csvData);
});

这适用于小型文件,据说我测试了高达100-200MB(不确定最大/最大尺寸,它是在那个范围内。任何更大的说300 + MB并且它失败。

node.js code / expressjs返回如下错误:

#
# Fatal error in ../deps/v8/src/handles.h, line 48
# CHECK(location_ != NULL) failed
#

==== C stack trace ===============================

1: ??
2: ??
3: ??
4: ??
5: ??
6: ??
7: ??
Illegal instruction: 4

我怀疑这是node.js fs.readFileSync()的问题,并将输出存储在变量而不是表达式中?我目前正在使用node.js v0.12.4。

我如何重新编写代码以使其能够通过HTTP将大文件作为一串文本返回?

至于错误信息,我原以为它应该会返回内存不足的内容,遗憾的是输出内容相当神奇。

2 个答案:

答案 0 :(得分:0)

尝试使用display: block,并指定一个事件监听器:

Readable stream

我从未真正尝试过,但它应该有用。

答案 1 :(得分:0)

直接回复:

var fs = require('fs');
app.get('/api/csv/:filename', function (req, res) {
  var filepath = "public/uploads/"+req.params.filename
  var stream = fs.createReadStream(filepath);
  stream.pipe(res);
});