busboy没有发射完成事件 [英] busboy not firing finish event
本文介绍了busboy没有发射完成事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这里是路由 -
app.post('/ upload / notes',auth.requiresApiLogin,function(req,res){
upload.file(req,res) ;
});
这里是具有导出文件方法的控制器(upload.js)代码
var fs = require('fs'),
uuid = require('node-uuid'),
path = require('path'),
Busboy = require('busboy');
exports.file = function(req,res){
var busboy = new Busboy({headers:req.headers});
busboy.on('file',function(fieldname,file,filename,transferEncoding,mimeType){
console.log(inside upload function);
console.log(file) ;
});
busboy.on('field',function(fieldname,val,valTruncated,keyTruncated){
console.log(inside field function);
console.log(fieldname);
});
busboy.on('finish',function(){
console.log('finished');
});
req.pipe(busboy);
//
// req.pipe(req.busboy);
// req.busboy.on('file',function(fieldname,file,filename,transferEncoding,mimeType){
// var fName = uuid.v4();
// console.log(filename);
// var fileext = filename.substr(filename.lastIndexOf('。')+ 1);
//
// console.log(transferEncoding) ;
// console.log(mimeType);
// var filepath = path.normalize(__ dirname +'/../../');
// var fstream = fs .createWriteStream(filepath +'/ server / uploads /'+ fName +'。'+ fileext);
// file.pipe(fstream);
// fstream.on('close',function {
// res.redirect('back');
//});
//});
};
所以,我看到,字段和文件都被登录在控制台,但完成事件没有被解雇我还应该尝试什么?
解决方案
您需要使用文件
流不知何故。为了测试目的,您可以通过在文件事件处理程序中添加 file.resume();
来忽略数据。
I am trying to pass a request object from my routes to a controller which processes the uploads,
here is the route -
app.post('/upload/notes',auth.requiresApiLogin,function(req,res){
upload.file(req,res);
});
here is the controller (upload.js) code which has the exported file method
var fs = require('fs'),
uuid = require('node-uuid'),
path = require('path'),
Busboy = require('busboy');
exports.file = function(req, res) {
var busboy = new Busboy({ headers: req.headers});
busboy.on('file', function(fieldname, file, filename,transferEncoding,mimeType) {
console.log("inside upload function");
console.log(file);
});
busboy.on('field', function(fieldname, val, valTruncated,keyTruncated) {
console.log("inside field function");
console.log(fieldname);
});
busboy.on('finish',function(){
console.log('finished');
});
req.pipe(busboy);
//
// req.pipe(req.busboy);
// req.busboy.on('file', function(fieldname, file, filename,transferEncoding,mimeType) {
// var fName = uuid.v4();
// console.log(filename);
// var fileext = filename.substr(filename.lastIndexOf('.') + 1);
//
// console.log(transferEncoding);
// console.log(mimeType);
// var filepath = path.normalize(__dirname + '/../../');
// var fstream = fs.createWriteStream(filepath+'/server/uploads/'+fName+'.'+fileext);
// file.pipe(fstream);
// fstream.on('close', function () {
// res.redirect('back');
// });
// });
};
So, what i see that both the fields and the files are being logged in console but the finish event is not getting fired. What else should i try ?
解决方案
You need to consume the file
stream somehow. For testing purposes you can ignore the data by adding file.resume();
inside the file event handler.
这篇关于busboy没有发射完成事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文