Загрузка файла Nodejs Express Multer - обработка ответа на маршруте на основе данных формы - PullRequest
0 голосов
/ 03 октября 2018

Моя текущая реализация выглядит следующим образом:

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]);

Решил мою проблему.Это не должно иметь значения!

1 Ответ

0 голосов
/ 03 октября 2018

req.body.item_id не определено в пределах:

filename: function (req, file, cb) {

Я уже проверил это, это сработало, значение неundefined в этом объеме

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...