首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node Multer意外字段

Node Multer意外字段
EN

Stack Overflow用户
提问于 2015-07-21 12:08:21
回答 8查看 161.7K关注 0票数 173

我正在使用multer npm模块将文件上传到我的应用程序中。

我定义的multer函数允许将单个文件上传到文件系统。一切都在运行时运行;问题是在我上传文件后,我得到了下面的一个错误。任何关于去哪里寻找的建议都很受欢迎。

错误:

代码语言:javascript
复制
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) 

app.js

代码语言:javascript
复制
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');
  })
});

Index.hbs

代码语言:javascript
复制
<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"
  }
}
EN

回答 8

Stack Overflow用户

发布于 2015-07-22 15:19:45

在multer的upload.single(<NAME>)函数中使用的<NAME>必须与在<input type="file" name="<NAME>" ...>中使用的相同。

所以你需要改变

var type = upload.single('file')

var type = upload.single('recfile')

in you app.js

希望这能有所帮助。

票数 255
EN

Stack Overflow用户

发布于 2018-05-15 03:00:50

文森回答的后续问题。

不能直接回答问题,因为问题使用的是表单。

对我来说,使用的不是输入标记的名称,而是将文件附加到formData时的名称。

前端文件

代码语言:javascript
复制
   var formData = new FormData();
   formData.append('<NAME>',this.new_attachments)

web服务文件:

代码语言:javascript
复制
   app.post('/upload', upload.single('<NAME>'),...
票数 36
EN

Stack Overflow用户

发布于 2017-05-19 13:49:40

这是你可以使用的Api

代码语言:javascript
复制
 const express        = require('express');
 const bodyParser     = require('body-parser');
 const app = express();
 var multer = require('multer');
 const port = 8000;
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: true }));

 app.listen(port, ()=>{
 console.log('We are live on' + port);
 });

 var upload = multer({dest:'./upload/'});

 app.post('/post', upload.single('file'), function(req, res) {
  console.log(req.file);
 res.send("file saved on server");
 });

这也适用于邮递员,但是这个文件没有.jpg扩展名,有什么建议吗?如下所述

如果上载没有扩展名的文件,这是multer的默认功能,但是会为您提供文件对象,您可以使用该对象更新文件的扩展名。

代码语言:javascript
复制
var filename = req.file.filename; 
var mimetype = req.file.mimetype; 
mimetype = mimetype.split("/"); 
var filetype = mimetype[1]; 
var old_file = configUploading.settings.rootPathTmp+filename; 
var new_file = configUploading.settings.rootPathTmp+filename+'.'+filetype; 
rname(old_file,new_file);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31530200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档