使用node.js读取文件并将输出作为HTTP响应expressjs的文件大小限制
Filesize limit in reading files with node.js and serving output as HTTP response expressjs?
我为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代码/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()和存储输出在一个变量,而不是expressjs?我目前使用node.js v0.12.4.
我该如何重新编写代码,使其能够通过HTTP返回巨大的文件作为文本字符串?
对于错误消息,我认为它应该返回内存不足之类的东西,遗憾的是相当模糊的输出。
尝试使用Readable stream
,并分配一个事件侦听器:
const readable = fs.createReadStream("public/uploads/" + req.params.filename);
readable.on('data', (chunk) => {
res.write(chunk);
});
readable.on('end', () => {
res.end();
});
我从来没有真正尝试过,但它应该工作。
直接管道到响应:
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);
});
相关文章:
- 无法导出函数expressjs/requestjs中的变量
- nodejs-expressjs上传图像并显示它们
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- 响应动画手风琴不工作
- 如何在ExpressJS和LomotiveJS上保存对变量的GET响应
- nodejs或expressjs在没有返回响应的情况下重复调用路由
- 对 Expressjs / Nodejs 请求 - 响应处理感到困惑
- Nodejs, expressjs - 如何提供延迟响应
- Expressjs无法检测到响应
- 使用正确的数组响应HTTP请求时出现问题.使用expressjs从函数内部发送结果的可能方法
- 在expressjs中,从函数向路由发送一个响应
- 使用node.js读取文件并将输出作为HTTP响应expressjs的文件大小限制
- ExpressJs在为每个路由发送响应后执行回调
- web服务-使用javascript调用expressjs restful webservice =>结果总是空的响应
- 在ExpressJS中编辑响应