multer – req.file始终未定义

我已经看了很多同样的问题的答案,但我还没有find一个工作的解决scheme。 我试图做一个Web应用程序,您可以上传文件使用快递和MULTER,我有一个问题,没有文件正在上传和REQ.FILE总是未定义。

我的代码如下

'use strict'; var express = require('express'); var path = require('path'); var multer = require('multer') var upload = multer({ dest: 'uploads/' }) var app = express(); require('dotenv').load(); app.use(express.static(path.join(__dirname, 'main'))); app.post('/upload', upload.single('upl'), function (req, res, next) { // req.file is the `avatar` file // req.body will hold the text fields, if there were any console.log(req.file); res.status(204).end(); }) var port = process.env.PORT || 8080; app.listen(port, function () { console.log('Node.js listening on port ' + port + '...'); }); 

表格

  <form class="uploadForm" action="/upload" method="post" enctype="multipart/formdata"> <label class="control-label">Select File</label> <input name="upl" id="input-1" type="file" class="file"> <input type="submit" value="submit" /> </form> 

非常感谢帮助,这让我疯狂。

你的enctype有些不正确,应该是multipart/form-data而不是multipart/formdata

邮递员的情况下,请尝试以下方法:

  1. closuresAPI的postman选项卡
  2. 再次打开一个新的选项卡
  3. 重buildAPI请求,然后发送。

这可能会解决这个问题。 每次重新启动服务器时,都需要按照上述步骤再次调用API。 原因是multer将一些名为connect.sid的Cookie发送给客户端,这可能需要进一步的通信。 使用旧的cookie不会上传文件。

我把我的(有很多我想象和肯定更好)的解决scheme,以帮助像我这样的人,因为我已经search整整一天;-(


 //JS file on node side var express = require('express'); var fileUpload = require('express-fileupload'); var fs = require("fs"); var app = express(); console.log('étape 0'); app.use(express.static('mesStatic')); app.use(fileUpload()); console.log('étape 1'); app.get('/indexFileUpload.htm', function (req, res) { res.sendFile( __dirname + "/" + "indexFileUpload.htm" ); }) console.log('étape 2'); app.post('/file_upload', function (req, res) { console.log('étape 3'); console.log('req.files:' , req.files); if (!req.files) { res.send('No files to upload.'); return; } console.log('req.files.file.data:' , req.files.file.data); var bufDataFile = new Buffer(req.files.file.data, "utf-8"); console.log('étape 3.1'); console.log('__dirname : ' + __dirname); fs.writeFile(__dirname + '/file_upload/output.txt', bufDataFile, function(err) { if (err) { return console.error(err); } else { console.log("Data written successfully !"); } console.log('étape 4'); res.end('Fin OK !!!'); }) }) var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port); }) 

HTML文件,

 <form class="uploadForm" action="/upload" method="post" enctype="multipart/form-data"> <label class="control-label">Select File</label> <input name="upl" id="input-1" type="file" class="file"> <input type="submit" value="submit" /> </form> 

app.js

 var express=require("express"); var multer=require("multer"); var app=express(); var upload=multer({dest:"uploads/"}); app.post("/upload",upload.single("upl"),function(req,res){ console.log("Uploaded Successfull with filename : "+req.upl.filename); }); 

是的,你的环境types是错误的,这是唯一的问题。 确保你改正了你的enctype,否则你可能会在req.file或req.files中得到undefined。