我正在使用busboy与node.js和express.js一起开发文件共享平台。
此时它很好用,但上传大文件。
如果我这样做,则在上传大文件时服务器不接受任何新请求。
我很正常吗?如果是,如何改善这种行为,即使这意味着上传会花费更多时间......现在我在ubuntu上的一台相当不错的PC(asus i7 / 8G)上开发并测试localhost。
当我开始uploadind一个大文件,并打开一个新选项卡转到该应用程序时,该选项卡仅在上传完成时加载。
应用程序加载:
var app = express();
//...
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());
// Request multipart parsing middleware
app.use(busboy());
// default options, immediately start reading from the request stream and
// parsing
app.use(busboy({ immediate: true }));
我在files controller
中的上传方法:
exports.create = function(req, res) {
var _file = new File(req.body);
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
file.on('data', function(data) {
_file.data += data;
});
file.on('end', function() {
_file.save(function(err) {
if (err) {
console.error(err);
return res.status(500).send({
message: errorHandler.getErrorMessage(err)
});
} else {
// doing some stuff on save
}
});
});
});
// req.busboy.on('field', function(key, value, keyTruncated, valueTruncated) {
// console.log('Field [' + key + ']: value: ' + value);
// });
// req.busboy.on('finish', function() {
// console.log('Done parsing form!');
// });
req.pipe(req.busboy);
};
答案 0 :(得分:1)
这里至少有一些问题:
busboy
正在加载两次。您应该从app.use(busboy({ immediate: true }));
。app.js
行
_file.data += data;
)。您应该将文件流式传输到某个地方,无论是磁盘,某些网络存储服务(如亚马逊S3),还是流程之外的任何其他位置。File
对象。如果您确定只发送一个文件(例如,您始终是客户端),也许这不是问题,但值得注意。