我正在使用 multer npm 模块将文件上传到我的应用程序。
我定义的 multer 函数是允许将单个文件上传到文件系统。运行时一切正常;问题是在我上传文件后出现以下错误。任何关于在哪里看的建议表示赞赏。
Unexpected field Error: Unexpected field at makeError (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\lib\make-error.js:12:13) at wrappedFileFilter (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\index.js:39:19) at Busboy.<anonymous> (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\lib\make-middleware.js:97:7) at Busboy.emit (events.js:118:17) at Busboy.emit (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\node_modules\busboy\lib\main.js:31:35) at PartStream.<anonymous> (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\node_modules\busboy\lib\types\multipart.js:205:13) at PartStream.emit (events.js:107:17) at HeaderParser.<anonymous> (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\Dicer.js:51:16) at HeaderParser.emit (events.js:107:17) at HeaderParser._finish (c:\Users\Dev\WebstormProjects\Crunch\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\HeaderParser.js:70:8)
var multer = require('multer'); var app = express(); var fs = require('fs'); //. . . var upload = multer({ dest: 'upload/'}); var type = upload.single('file'); app.post('/upload', type, function (req,res) { var tmp_path = req.files.recfile.path; var target_path = 'uploads/' + req.files.recfile.name; fs.readFile(tmp_path, function(err, data) { fs.writeFile(target_path, data, function (err) { res.render('complete'); }) });
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name='recfile' placeholder="Select file"/> <br/> <button>Upload</button> </form> #Package.json "dependencies": { "body-parser": "~1.13.2", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "easy-zip": "0.0.4", "express": "~4.13.1", "hbs": "~3.1.0", "less-middleware": "1.0.x", "morgan": "~1.6.1", "multer": "~1.0.0", "serve-favicon": "~2.3.0" } }
我们必须确保带有 name 属性的 type= 文件应该与传入的参数名称相同upload.single('attr')
upload.single('attr')
var multer = require('multer'); var upload = multer({ dest: 'upload/'}); var fs = require('fs'); /** Permissible loading a single file, the value of the attribute "name" in the form of "recfile". **/ var type = upload.single('recfile'); app.post('/upload', type, function (req,res) { /** When using the "single" data come in "req.file" regardless of the attribute "name". **/ var tmp_path = req.file.path; /** The original name of the uploaded file stored in the variable "originalname". **/ var target_path = 'uploads/' + req.file.originalname; /** A better way to copy the uploaded file. **/ var src = fs.createReadStream(tmp_path); var dest = fs.createWriteStream(target_path); src.pipe(dest); src.on('end', function() { res.render('complete'); }); src.on('error', function(err) { res.render('error'); }); });