Моя текущая реализация выглядит следующим образом:
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.Если 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 ("изображение", файлы [0]);
Решил мою проблему.Это не должно иметь значения!