node-multer:没有文件上传时表单提交失败
node-multer: Form submission fails when there is no file to upload
下面的这个 HTML 表单(除其他事项外)使用 express.js 和 multer 将文件上传到服务器。它工作正常,如果一个文件被选择,但如果文件被遗漏。
<form id="uploadform" method="post" action="/upload" enctype="multipart/form-data">
<p> Description: <input type="text" name="description"></p>
<p><input type="file" name="img"></p>
<p><input id="submit_upload" type="submit" value="Submit"></p>
</form>
我的 Node.js 应用程序包含中间件 multer。
var express = require('express');
var app = express();
var multer = require('multer');
app.use(multer(
{
dest: './public/img/',
rename: function (fieldname, filename) {
return filename + Date.now();
}
}));
提交表单后,我将被重定向到 /upload
,因为它在 HTML-上传表单 action="/upload"
中定义。
在我的 Node.js 脚本中,表单条目将按如下所示处理:
app.post('/upload', function (req, res) {
var form_description = req.body.description;
var form_datei = JSON.stringify(req.files.img.name);
form_datei = form_datei.substring(1, form_datei.length - 1);
// insert operations into database get placed here
res.redirect('/');
});
如果我不 select 表单中的文件并且只提交带有插入文本的文件,那么即使是文本也不会被提交。相反,我的控制台和浏览器 window 显示一条长错误消息,如下所示:
TypeError: Cannot read property 'name' of undefined
如果没有文件 selected,我如何提交表单?
文件上传应该是可选的。
感谢您的帮助!
问题出在您尝试检索 req.files.img.name
中的图像名称时。由于 req.files.img
将 return undefined
,您无法阅读那里的 属性。
在尝试使用文件之前检查文件是否已提交:
app.post('/upload', function (req, res) {
var form_description = req.body.description;
if(req.files.img) {
var form_datei = JSON.stringify(req.files.img.name);
form_datei = form_datei.substring(1, form_datei.length - 1);
// insert operations into database get placed here
}
res.redirect('/');
});
下面的这个 HTML 表单(除其他事项外)使用 express.js 和 multer 将文件上传到服务器。它工作正常,如果一个文件被选择,但如果文件被遗漏。
<form id="uploadform" method="post" action="/upload" enctype="multipart/form-data">
<p> Description: <input type="text" name="description"></p>
<p><input type="file" name="img"></p>
<p><input id="submit_upload" type="submit" value="Submit"></p>
</form>
我的 Node.js 应用程序包含中间件 multer。
var express = require('express');
var app = express();
var multer = require('multer');
app.use(multer(
{
dest: './public/img/',
rename: function (fieldname, filename) {
return filename + Date.now();
}
}));
提交表单后,我将被重定向到 /upload
,因为它在 HTML-上传表单 action="/upload"
中定义。
在我的 Node.js 脚本中,表单条目将按如下所示处理:
app.post('/upload', function (req, res) {
var form_description = req.body.description;
var form_datei = JSON.stringify(req.files.img.name);
form_datei = form_datei.substring(1, form_datei.length - 1);
// insert operations into database get placed here
res.redirect('/');
});
如果我不 select 表单中的文件并且只提交带有插入文本的文件,那么即使是文本也不会被提交。相反,我的控制台和浏览器 window 显示一条长错误消息,如下所示:
TypeError: Cannot read property 'name' of undefined
如果没有文件 selected,我如何提交表单? 文件上传应该是可选的。 感谢您的帮助!
问题出在您尝试检索 req.files.img.name
中的图像名称时。由于 req.files.img
将 return undefined
,您无法阅读那里的 属性。
在尝试使用文件之前检查文件是否已提交:
app.post('/upload', function (req, res) {
var form_description = req.body.description;
if(req.files.img) {
var form_datei = JSON.stringify(req.files.img.name);
form_datei = form_datei.substring(1, form_datei.length - 1);
// insert operations into database get placed here
}
res.redirect('/');
});