Nodejs Express Multer 文件上传 - 根据表单数据处理路由中的响应
Nodejs Express Multer file upload - handle response in route based on form data
我目前的实现如下:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/images/items/')
},filename: function (req, file, cb) {
let ext = '';
if (file.originalname.split(".").length>1)
ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length);
cb(null, Date.now() + ext)
}
})
...使用路线....
app.post('/updateItemImage', upload.single('image'), function (req, res, next) {
console.log('user: ' + req.user.id + ' updating image: ' + req.body.item_id);
})
..好吧。这样可行。 req.body.item_id 出现在我的路线中,multer 处理 req.file,用唯一的文件名将其保存到磁盘。
然而...
我希望使用 multer 保存该项目,前提是 req.user.id 和 req.body.item_id 具有特定值。 req.body.item_id 在以下范围内未定义:
filename: function (req, file, cb) {
所以我不能将我的代码移动到这个函数中。
TLDR: post 函数需要捕获 req.body.item_id 和 req.file。 If req.body.item_id == value than save file and res.send('ok') 剥猫皮的方法不止一种。有什么可行的选择?
编辑:这是前端 js:
$scope.uploadFile = function(files) {
var fd = new FormData();
var uploadUrl = '/updateItemImage';
var fd = new FormData();
fd.append("image", files[0]);
fd.append("item_id", '11');
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then(function (response) {
if (response.data == 'ok') {
return
}
alert('something went wrong')
})
}
编辑:交换参数的顺序,使主体参数排在第一位:
fd.append("item_id", '11');
fd.append("image", 文件[0]);
解决了我的问题。这应该无关紧要!
req.body.item_id is undefined within the scope of:
filename: function (req, file, cb) {
我已经测试过了,它有效,值不在那个范围内undefined
我目前的实现如下:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/images/items/')
},filename: function (req, file, cb) {
let ext = '';
if (file.originalname.split(".").length>1)
ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length);
cb(null, Date.now() + ext)
}
})
...使用路线....
app.post('/updateItemImage', upload.single('image'), function (req, res, next) {
console.log('user: ' + req.user.id + ' updating image: ' + req.body.item_id);
})
..好吧。这样可行。 req.body.item_id 出现在我的路线中,multer 处理 req.file,用唯一的文件名将其保存到磁盘。
然而...
我希望使用 multer 保存该项目,前提是 req.user.id 和 req.body.item_id 具有特定值。 req.body.item_id 在以下范围内未定义:
filename: function (req, file, cb) {
所以我不能将我的代码移动到这个函数中。
TLDR: post 函数需要捕获 req.body.item_id 和 req.file。 If req.body.item_id == value than save file and res.send('ok') 剥猫皮的方法不止一种。有什么可行的选择?
编辑:这是前端 js:
$scope.uploadFile = function(files) {
var fd = new FormData();
var uploadUrl = '/updateItemImage';
var fd = new FormData();
fd.append("image", files[0]);
fd.append("item_id", '11');
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then(function (response) {
if (response.data == 'ok') {
return
}
alert('something went wrong')
})
}
编辑:交换参数的顺序,使主体参数排在第一位: fd.append("item_id", '11'); fd.append("image", 文件[0]);
解决了我的问题。这应该无关紧要!
req.body.item_id is undefined within the scope of:
filename: function (req, file, cb) {
我已经测试过了,它有效,值不在那个范围内undefined