使用 multer 快速上传文件不适用于 urlencodedParser
express upload file with multer not working with urlencodedParser
我正在尝试使用 post 申请表上传图片。在我的 express.js 服务器中,我同时使用 multer 和 urlencodedParser,因为我将所有 html 输入作为 json 对象通过 post 请求正文加上一个选择文件,我正在用 multer 处理它。
这是表单的 HTML 代码:
<form action="http://localhost:8000/api/addOrgs" method="post">
<div class="form-row">
<!-- OTHER CODE -->
<div class="form-group col-md-6">
<label>Image or Logo</label>
<input type="file" class="form-control" name="image" id="fileToUpload">
</div>
<button class="btn btn-primary"> Add the organization to the system</button>
</div>
</form>
我已经设置了multer:
// add image to folder
var multer = require('multer')
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../public/images/')
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
})
var upload = multer({ storage: storage })
这是快速 post 请求处理程序:
// to add a new organization to the list
app.post('/api/addOrgs', upload.single('imageToUpload'), urlencodedParser, (req, res)=> {
try {
var newobj = req.body;
// want to change name of id in obj
// add image name and delete image field
newobj['img'] = newobj.image;
delete newobj.image;
// read orgs file
let orgs = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../orgs.json')));
//... OTHER CODE
// send respond
res.send('<h1>Successfully added!</h1><br><p>'+JSON.stringify(newobj, null, 4)+'</p></br><b>Now you can go <a href="/good">BACK</a></b>')
// OTHER CODE
} catch (e) {
// ... OTHER CODE
}
});
问题是我成功地通过 req.body 发送了在 json 对象中上传的文件名,但是 它没有将文件保存在文件夹中。问题是否来自对 app.post()
参数使用 urlencodedParser
?
或者我必须做些什么才能将文件保存在我的 app.post()
函数中吗?
文件的格式应具有 enctype="multipart/form-data"
属性。试试这个,它应该可以工作
我正在尝试使用 post 申请表上传图片。在我的 express.js 服务器中,我同时使用 multer 和 urlencodedParser,因为我将所有 html 输入作为 json 对象通过 post 请求正文加上一个选择文件,我正在用 multer 处理它。
这是表单的 HTML 代码:
<form action="http://localhost:8000/api/addOrgs" method="post">
<div class="form-row">
<!-- OTHER CODE -->
<div class="form-group col-md-6">
<label>Image or Logo</label>
<input type="file" class="form-control" name="image" id="fileToUpload">
</div>
<button class="btn btn-primary"> Add the organization to the system</button>
</div>
</form>
我已经设置了multer:
// add image to folder
var multer = require('multer')
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../public/images/')
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
})
var upload = multer({ storage: storage })
这是快速 post 请求处理程序:
// to add a new organization to the list
app.post('/api/addOrgs', upload.single('imageToUpload'), urlencodedParser, (req, res)=> {
try {
var newobj = req.body;
// want to change name of id in obj
// add image name and delete image field
newobj['img'] = newobj.image;
delete newobj.image;
// read orgs file
let orgs = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../orgs.json')));
//... OTHER CODE
// send respond
res.send('<h1>Successfully added!</h1><br><p>'+JSON.stringify(newobj, null, 4)+'</p></br><b>Now you can go <a href="/good">BACK</a></b>')
// OTHER CODE
} catch (e) {
// ... OTHER CODE
}
});
问题是我成功地通过 req.body 发送了在 json 对象中上传的文件名,但是 它没有将文件保存在文件夹中。问题是否来自对 app.post()
参数使用 urlencodedParser
?
或者我必须做些什么才能将文件保存在我的 app.post()
函数中吗?
文件的格式应具有 enctype="multipart/form-data"
属性。试试这个,它应该可以工作