Node.js 错误 : Unexpected field

标签 node.js file-upload multer

我在使用 Node.js multer 时遇到了麻烦......

我想知道是什么原因导致了这个问题。 我想我在客户端和 node.js 的 multer upload.single('streamfile') 之间设置了正确的 input[name=streamfile] 名称。

我不知道是什么其他因素导致了这个问题。

下面是我的代码.. 谢谢。

错误信息

Error: Unexpected field
    at makeError (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/multer/lib/make-error.js:12:13)
    at wrappedFileFilter (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/multer/index.js:40:19)
    at Busboy.<anonymous> (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/multer/lib/make-middleware.js:114:7)
    at emitMany (events.js:127:13)
    at Busboy.emit (events.js:201:7)
    at Busboy.emit (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/busboy/lib/main.js:38:33)
    at PartStream.<anonymous> (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/busboy/lib/types/multipart.js:213:13)
    at emitOne (events.js:96:13)
    at PartStream.emit (events.js:188:7)
    at HeaderParser.<anonymous> (/Users/taeseongpark/Documents/Study/NodeJS/node_basic_test/node_modules/dicer/lib/Dicer.js:51:16)

客户端 HTML

<form action="http://localhost:8989/fileupload" method="post" enctype="multipart/form-data">
    <input type="file" name="streamfile">
    <input type="button" data-inline="true" value="Input" id="filesubmit">
</form>
<script lang="javascript">
    $('form #filesubmit').on('click', (e)=>{
        var uploadfile = $("input[name=streamfile]")[0].files[0];
        var formData = new FormData(); 
        formData.append("myfile", uploadfile);

        console.log('uploadfile', uploadfile, uploadfile.type);

        var localurl = 'http://localhost:8989/fileupload'
        $.ajax({ 
            url: localurl,  // googleCloud
            data: formData, 
            processData: false, 
            contentType: false, 
            type: 'POST', 
            success: function(data){ 
                console.log('response data', data);
            } 
        });
    });
</script>

Node.js 服务器

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

var app = express()

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", 'Content-Type, Authorization, Content-Length, X-Requested-With');
    res.header("Access-Control-Allow-Methods", "PUT, POST, GET, OPTIONS, DELETE");
    next();
});

app.post('/fileupload', upload.single('streamfile'), function (req, res) {
    console.log('req.file', req.file);
  // req.file is the `avatar` file 
  // req.body will hold the text fields, if there were any 
})

// Connect to Web Server
var port = '8989';
app.listen(port, () => {
    console.log('[Express] fileupload started at %d port', port);
});
// "express": "^4.16.2", "multer": "^1.3.0",

最佳答案

formData.append 分配的字段名称 需要与服务器为 Multer 设置的预期字段名称相匹配。

formData.append("streamfile", uploadfile);

关于Node.js 错误 : Unexpected field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47050928/

相关文章:

javascript - 使用 multer 上传多个文件失败

javascript - Multer file.filename 和 file.path 未定义

javascript - 在 npm 包中使用对等依赖

php - 在moodle File API中永久保存后删除草稿文件

php - Yii2 上传多个文件不起作用

asp.net - 在 ASP.NET MVC 3 中上传大于 2GB 的文件

linux - 如何通过命令行/shell 脚本从 etc/wpa_supplicant/wpa_supplicant.conf 中删除网络配置文件

javascript - 当我使用 for 循环时,为什么我的代码不在 forEach 中等待?

javascript - Node.js 中 'require' 声明后的空括号是什么意思?

node.js - C9.io 上的 Multer、Node、EACCES 错误