节点js multer文件上传不起作用。 req.file和req.files总是未定义的

我正在尝试将文件上传到我的服务器,但在我的POST REST端点上始终未定义req.filereq.files

我试图上传的内容是一个“.dat”文件,我期待一个json响应。

这是我的代码:

服务器端:

 var express = require('express'); var multer = require('multer') var upload = multer({ dest: 'uploads/' }) var app = express() app.post('/creoUpload', upload.single('uploadFileField'), function(req, res, next) { console.log("req.file = ",JSON.stringify(req.file)); //is undefined console.log("req.files = ",JSON.stringify(req.files)); //also undefined }); 

客户端:

 


JS:

 $( "#creoUploadForm" ).submit(function( event ) { event.preventDefault(); var formData = new FormData($(this)[0]); $.ajax({ url: '/creoUpload', type: 'POST', data: formData, async: true, cache: false, contentType: false, processData: false, success: function (returndata) { console.log("RETURN DATA IS: ",returndata); }, error: function (err) { console.log("ERROR: ",err); } }); }); 

我一直在玩这些田地,但它不起作用..任何人都能看到我在这里做错了什么?

我正在关注https://www.npmjs.com/package/multer中的示例

版本:

  • 快递版:4.12.0
  • 节点版本:6.5.0
  • JQuery:1.12.1

谢谢!

您正在使用multer作为中间件,因此在进入您的function并打印之前,它已将图像上传到存储并从req.files中删除记录。

有两种方法可以访问req.files。

  1. 使用multer作为finw3声明的函数

  2. 另一种解决方案是

//代码开始

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/filepath') }, filename: function (req, file, cb) { let filename = 'filenametogive'; req.body.file = filename cb(null, filename) } }) var upload = multer({ storage: storage }) 

//代码结束

现在您可以访问req.body.file中的文件

我有同样的问题,如果你检查error handling部分的文档还有另一种实现,那就是适合我的那个。 代码将是这样的:

 var express = require('express'); var multer = require('multer'); var upload = multer({ dest: 'uploads/' }); var app = express(); app.post('/creoUpload', function(req, res, next) { upload(req, res, function (err) { if (err) { // An error occurred when uploading console.log('Err: ', err); return; } else { console.log('req.file: ', JSON.stringify(req.file)); console.log('req.files: ', JSON.stringify(req.files)); return; } }) }); 

如果req.filereq.files undefined ,那么问题是multer没有收到上传的文件,这个问题似乎与jQuery有关。

不支持使用jQuery“v1.12.1”上传FormData, 它根本不会发送任何内容。 我建议尝试使用fetch Api或将jQuery的版本更改为3.3.1

我已经测试了代码,当我将jQuery版本从v1.12.1更改v3.3.1时,我已成功将文件上传到我的服务器。

不要将contentType设置为false ,因为POST方法需要contentType = 'w-xxx-form-urlencoded' ,这是JQ的默认值。