Multer req.body 在节点 js 中为空
Multer req.body empty in node js
我正在使用 multer 上传表单数据(一些图像文件)。
但是 req.body 和 req.files 都是空的。当我上传图片时,我收到成功消息“您的图片已上传”,但我的文件夹是空的。
我尝试了 Whosebug 和 GitHub 上可用的所有解决方案。
但运气不好。
在我的代码下方
HTML 文件中的表单
<form id="uploadForm" enctype="multipart/form-data" action="multerFile" method="post">
<input type="file" name="userPhoto" multiple />
<input type="submit" value="Upload Image" name="submit">
<input type='text' id='random' name='random'>
<br>
<span id="status"></span>
</form>
<script>
$(document).ready(function () {
$('#uploadForm').submit(function () {
$("#status").empty().text("File is uploading...");
$(this).ajaxSubmit({
error: function (xhr) {
status('Error: ' + xhr.status);
},
success: function (response) {
console.log(response)
$("#status").empty().text(response);
}
});
return false;
});
});
</script>
index.js
app.post('/multerFile', function (req, res) {
console.log("hi i am multer function")
var storage = multer.diskStorage({
destination: 'C:/Users/chandra/Documents/project/node_project/public'
});
var upload = multer({ storage: storage }).array('userPhoto', 2);
upload(req, res, function (err) {
if (err) {
console.log(err);
return res.end("Error uploading file.");
} else {
console.log(req.body)
console.log(req.files);
req.files.forEach(function (f) {
console.log(f);
// and move file to final destination...
});
res.end("File has been uploaded");
}
});
});
我试过了:
Express, Multer, BodyParser req.body empty array
multer req.body showing empty always
https://github.com/expressjs/multer/issues/351
https://github.com/expressjs/multer/issues/391
并且我遵循了 multer 的教程
https://codeforgeek.com/2016/01/multiple-file-upload-node-js/
我无法理解我做错了什么?
请帮忙。
提前致谢
首先,.ajaxSubmit() 不是核心 jQuery 函数。你需要 jQuery Form Plugin 但我不知道你是否像下面这样导入它:
<script src="http://malsup.github.com/jquery.form.js"></script>
最简单的方法是不使用这样的插件:
$('#uploadForm').submit(function() {
$("#status").empty().text("File is uploading...");
var formData = new FormData($('#uploadForm')[0]);
$.ajax({
type: 'POST',
url: '/multerFile',
data: formData,
success: function(response) {
console.log(response)
$("#status").empty().text(response);
},
contentType: false, // Prevent jQuery to set the content type
processData: false // Prevent jQuery to process the data
});
return false;
});
现在在你的后端,你的目的地最好是(在你的 public 文件夹中有一个文件夹上传):
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads/')
},
});
我刚刚将存储空间更改为
const storage = multer.diskStorage({
destination: './public/uploads/',
filename: function(req, file, cb){
cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
它运行良好..
我正在使用 multer 上传表单数据(一些图像文件)。
但是 req.body 和 req.files 都是空的。当我上传图片时,我收到成功消息“您的图片已上传”,但我的文件夹是空的。
我尝试了 Whosebug 和 GitHub 上可用的所有解决方案。 但运气不好。
在我的代码下方
HTML 文件中的表单
<form id="uploadForm" enctype="multipart/form-data" action="multerFile" method="post">
<input type="file" name="userPhoto" multiple />
<input type="submit" value="Upload Image" name="submit">
<input type='text' id='random' name='random'>
<br>
<span id="status"></span>
</form>
<script>
$(document).ready(function () {
$('#uploadForm').submit(function () {
$("#status").empty().text("File is uploading...");
$(this).ajaxSubmit({
error: function (xhr) {
status('Error: ' + xhr.status);
},
success: function (response) {
console.log(response)
$("#status").empty().text(response);
}
});
return false;
});
});
</script>
index.js
app.post('/multerFile', function (req, res) {
console.log("hi i am multer function")
var storage = multer.diskStorage({
destination: 'C:/Users/chandra/Documents/project/node_project/public'
});
var upload = multer({ storage: storage }).array('userPhoto', 2);
upload(req, res, function (err) {
if (err) {
console.log(err);
return res.end("Error uploading file.");
} else {
console.log(req.body)
console.log(req.files);
req.files.forEach(function (f) {
console.log(f);
// and move file to final destination...
});
res.end("File has been uploaded");
}
});
});
我试过了:
Express, Multer, BodyParser req.body empty array
multer req.body showing empty always
https://github.com/expressjs/multer/issues/351
https://github.com/expressjs/multer/issues/391
并且我遵循了 multer 的教程
https://codeforgeek.com/2016/01/multiple-file-upload-node-js/
我无法理解我做错了什么?
请帮忙。
提前致谢
首先,.ajaxSubmit() 不是核心 jQuery 函数。你需要 jQuery Form Plugin 但我不知道你是否像下面这样导入它:
<script src="http://malsup.github.com/jquery.form.js"></script>
最简单的方法是不使用这样的插件:
$('#uploadForm').submit(function() {
$("#status").empty().text("File is uploading...");
var formData = new FormData($('#uploadForm')[0]);
$.ajax({
type: 'POST',
url: '/multerFile',
data: formData,
success: function(response) {
console.log(response)
$("#status").empty().text(response);
},
contentType: false, // Prevent jQuery to set the content type
processData: false // Prevent jQuery to process the data
});
return false;
});
现在在你的后端,你的目的地最好是(在你的 public 文件夹中有一个文件夹上传):
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads/')
},
});
我刚刚将存储空间更改为
const storage = multer.diskStorage({
destination: './public/uploads/',
filename: function(req, file, cb){
cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
它运行良好..