我当前的实现如下:
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,并使用唯一的文件名将其保存到磁盘。
但是 ...
仅当req.user.id和req.body.item_id具有特定值时,我才希望使用multer保存该项目。在以下范围内,未定义req.body.item_id:
filename: function (req, file, cb) {
因此我无法将代码移入该函数。
TLDR: post函数需要捕获req.body.item_id和req.file。如果req.body.item_id ==值,然后保存文件并重新发送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”,files [0]);
解决了我的问题。没关系!