我正在尝试使用multer处理前端到后端的配置文件上传照片,但不断收到此错误:
{ [Error: Unexpected field]
code: 'LIMIT_UNEXPECTED_FILE',
field: 'file',
storageErrors: [] }
以下是我的代码:
register.ejs:
<div class="form-group">
<input class="form-control" type="file" name="image" id="image">
</div>
ajax.js:
$('form').submit(function(e) {
e.preventDefault();
var formData = new FormData(this);
// var img = cropper.getCroppedCanvas().toDataURL();
// formData.append('img',img);
$.ajax({
url: '/register',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function () {
console.log('Upload success');
},
error: function () {
console.log('Upload error');
}
});
});
app.js:
var multer = require('multer');
var cloudinary = require('cloudinary');
...
// MULTER
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, "./public/uploads");
},
filename: function(req, file, callback) {
callback(null, Date.now() + file.originalname);
}
});
var upload = multer({ storage : storage}).single("image");
app.post("/register", function(req, res) {
upload(req, res, function(err){
if(err) {
console.log(err);
return res.send("Error uploading file.");
}
res.send("Upload success");
});
});
当我尝试获取req.body.img或req.file时,我也得到一个未定义的对象。也许formdata没有正确填充?任何人都能为我解释一下吗?
答案 0 :(得分:0)
在multer
docs上说,您应该将enctype="multipart/form-data"
属性传递给<form>
元素。我对ajax
并不是很熟悉,但是我认为您可能必须将contentType:
中的ajax.js
设置为"multiport/form-data"
。
我也有类似的错误,但这是由于文本字段键不匹配引起的。
答案 1 :(得分:0)
我也遇到了同样的问题,而不是使用
var upload = multer({storage:storage})。single('image');
使用fields()方法允许一次处理多个文件
app.use(multer({storage:storage})。fields([{{name:'image',maxCount:1}])));
文件数据存储在req.files中, 那么您只需处理文件
当您尝试在单个multer中间件中处理多个表单数据对象时发生错误,
您可以使用sycl::id<1>
选项将不同的文件存储在不同的位置。
还有更多可以考虑的官方文档