为了账号安全,请及时绑定邮箱和手机立即绑定

使用Express 4.0上传的文件:req.file未定义

使用Express 4.0上传的文件:req.file未定义

开心每一天1111 2019-07-06 15:10:44
使用Express 4.0上传的文件:req.file未定义我试图获得一个使用Express 4.0的简单文件上传机制,但是我一直undefined为req.files在app.post尸体。以下是相关代码:var bodyParser = require('body-parser');var methodOverride = require('method-override'); //...app.use(bodyParser({ uploadDir: path.join(__dirname, 'files'), keepExtensions: true })); app.use(methodOverride());  //...app.post('/fileupload', function (req, res) {   console.log(req.files);    res.send('ok'); });.。以及附带的帕格代码:form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")     input(type="file", name="file", id="file")     input(type="submit", value="Upload")解感谢mscdex下面,我转向使用busboy而不是bodyParser:var fs = require('fs');var busboy = require('connect-busboy');//...app.use(busboy()); //...app.post('/fileupload', 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');         });     });});
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

看上去body-parser 支持在Express 3中上载文件,但对Express 4的支持被删除不再包含连接作为依赖项

在浏览了mscdex的答案中的一些模块之后,我发现express-busboy是一个更好的替代方案,也是最接近替代方案的替代品。我注意到的唯一不同之处是上传文件的属性。

console.log(req.files)使用体解析器(Express 3)输出如下所示的对象:

{ file: 
   { fieldName: 'file',
     originalFilename: '360px-Cute_Monkey_cropped.jpg',
     name: '360px-Cute_Monkey_cropped.jpg'
     path: 'uploads/6323-16v7rc.jpg',
     type: 'image/jpeg',
     headers: 
      { 'content-disposition': 'form-data; name="file"; filename="360px-Cute_Monkey_cropped.jpg"',
        'content-type': 'image/jpeg' },
     ws: 
      WriteStream { /* ... */ },
     size: 48614 } }

相比较console.log(req.files)使用特快专递(明示4):

{ file: 
   { field: 'file',
     filename: '360px-Cute_Monkey_cropped.jpg',
     file: 'uploads/9749a8b6-f9cc-40a9-86f1-337a46e16e44/file/360px-Cute_Monkey_cropped.jpg',
     mimetype: 'image/jpeg',
     encoding: '7bit',
     truncated: false
     uuid: '9749a8b6-f9cc-40a9-86f1-337a46e16e44' } }


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 2088 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信