2014-05-17 70 views
0

我现在使用angular-file-upload软件包来上传文件。在按下item.upload()之后,它宣称成功上传了该文件,但是我看到req.body是空的。请帮忙!无法将文件从AngularJS上传到ExpressJs

这里是角代码来处理:

var uploader = $scope.uploader = $fileUploader.create({ 
     scope: $scope,       // to automatically update the html. Default: $rootScope 
    url: '/api/teams/upload', 
    formData: [ 
     { key: 'value' } 
    ], 
    filters: [ 
     function (item) {     // first user filter 
      $scope.previewImage(item); 
      return true; 
     } 
    ] 
}); 

这里是触发上传方式:

uploader.bind('afteraddingfile', function (event, item) { 
    // console.info(item.file); 
    console.info('After adding a file', item); 

    // console.log('item.upload();'); 
    item.upload(); 
}); 

最后这里是明确的js代码:

exports.upload = function(req, res) { 
// console.log('req.headers'); 
// console.log(req.headers); 

console.log('req.body'); 
console.log(req.body); 

它有什么问题?

回答

0

首先确保你的文章被编码为enctype="multipart/form-data" ....

在快递4您需要设置服务器的body parser

var bodyParser  = require('dy-parser'); 
//... 

var app   = express(); 
//... 
app.use(bodyParser()); // pull information from html in POST 

var busboy = require('connect-busboy');  
app.use(busboy()); 

在早期版本的快车,你只需要添加从框架本身的身体分析器和文件将被存储在配置的位置:

 app.use(express.bodyParser({limit: '10mb', uploadDir: __dirname + '/public/uploads' }));    // pull information from html in POST 

由于版本4删除支持连接现在,你需要添加多/表单数据的自定义支持,解析器多/部分岗位,所以你将不得不做这样的事情:

var fs = require('fs'); 
var busboy = require('connect-busboy'); 

//... 
app.use(busboy()); 
//... 
app.post('/api/teams/upload', function(req, res) { 
    var fstream; 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
     console.log("Uploading: " + filename); 
     fstream = fs.createWriteStream(__dirname + '/files/' + filename); 
     file.pipe(fstream); 
     fstream.on('close', function() { 
      res.redirect('back'); 
     }); 
    }); 
}); 

在您需要调用$upload.upload要启动客户端上传