busboy没有发射完成事件 [英] busboy not firing finish event

查看:135
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆