2017-02-03 9 views
1

Я хочу загрузить изображения, используя multer. Но это не работает. Что здесь не так?Как загрузить файлы с помощью multer в Node.js?

Этот код в моем файле маршрута.

var multer = require('multer'); 
var upload = multer({ dest: 'public/uploads/' }); 

И это мой почтовый маршрут.

router.post('/addNewFood', upload.single('avatar'),function (req, res, next) { 
console.log(req.files); 
}); 
+0

http://lollyrock.com/articles/express4-file-upload/ –

+0

любая конкретная ошибка? –

ответ

0

Попробуйте это, это сработает для меня. Используется экспресс и узел.

var storage = multer.diskStorage({ 
 
    destination: function (req, file, cb) { 
 
    cb(null, 'public/uploads/') 
 
    }, 
 
    filename: function (req, file, cb) { 
 
    cb(null, file.originalname) 
 
    } 
 
}); 
 

 
var upload = multer({ storage: storage }).single('avatar'); 
 

 
router.post('/addNewFood', //Your authentication check,// 
 
    function (req, res, next) { 
 

 
    upload(req, res, function(err) { 
 
     if (err) { 
 
      res.redirect(req.headers.referer + "/error.html"); 
 
      return; 
 
     } 
 

 
     if (!req.files) { 
 
      res.redirect(req.headers.referer + "/error.html"); 
 
      return; 
 
     } else { 
 
      //Implement your own logic if needed. Like moving the file, renaming the file, etc. 
 
      res.redirect(req.headers.referer); 
 
     } 
 
    }); 
 
    } 
 
);

1

Убедитесь, что вы установите пакет

НПМ установки --save multer

Вы можете попробовать следующий способ, В стороне сервера, В ваших маршрутах или файле контроллера настройте multer:

var multer = require('multer'); 
var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, 'public/images/uploads') 
    }, 
    filename: function (req, file, cb) { 
     cb(null, Date.now() + '-' + file.originalname)  
    } 
}) 
var upload = multer({ storage: storage }); 

В объекте хранения адресатом является место ожидания, в котором будет загружен файл. Поэтому убедитесь, что в каталоге проекта создан путь/public/images/uploads. В противном случае вы можете изменить путь к файлу.

Также в качестве имени объекта хранения указано, каким будет имя загруженного файла. Здесь я добавляю текущее время с исходным именем файла, чтобы сделать все имя файла уникальным.

Теперь в нужной маршрутизации, предположим

router.post('/', upload.single('image'), (req, res) => { 
    //here your other task. 
}); 

Теперь ваш файл загружен. Убедитесь, что клиентская сторона использует одно и то же имя. В этом случае «образ».

<input type="file" name="image" id="image" class='form-control'> 

Это единая процедура загрузки файлов. Для нескольких файлов

router.post('/', upload.array(), function (req, res, next) { 
    //your task goes here 
}); 

Для получения дополнительной информации, проверить этот link.