Используйте Multer для загрузки файлов внутри Express Router

У меня есть рабочий REST-API, созданный с помощью node.js и Express.

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

Я использую Express Router и некоторое промежуточное ПО для аутентификации.

server.js (отрывок)

var router = express.Router()
app.use("/api", router)

[...]
router.use(function(req, res, next) {
    //Authentification middleware
    [...]
    next()
})

router.route("/upload")
     .post(function(req, res){
        //upload logic
     })

Как я могу использовать multer для обслуживания загруженного файла как req.file (или около того), но только в / api / upload и для авторизованного пользователи?


person lukas293    schedule 13.12.2015    source источник


Ответы (3)


Ладно, я понял.

я могу использовать

var multer = require("multer")
var upload = multer({ dest: "some/path" })

[...]

router.route("/upload")
    /* replace foo-bar with your form field-name */
    .post(upload.single("foo-bar"), function(req, res){
       [...]
    })
person lukas293    schedule 13.12.2015

Для меня это тоже сработало.

var multer = require("multer")
var upload = multer({ dest: "path" })

router.post("/upload", upload.single("foo-bar"), function(req, res) {
  ...
}
person Pei    schedule 13.07.2017
comment
Я потратил кучу времени, пытаясь заставить это работать. var uploadMulter = multer({ dest: directory }); router.post('/upload', uploadMulter.single("html_input_element_name"), function(req,res, next) {.... В репозитории Multer есть строчка In an average web app, only dest might be required,. Не верьте этой строке ... вам также нужен вызов .single(fieldname) ... Большое спасибо ... - person zipzit; 31.05.2018

В моем случае я пробую все, но это не работает, но я нашел решение

app.js

const multer  = require('multer');
const storage =  {
    dest:  'UPLOAD/PATH/'
}
const upload = multer(storage);
app.post('/myupload', upload.single('FILE_NAME'), (req,res)=>{
  res.send('Upload');
});

Я много раз пробовал использовать express.Router (), но он не работает, поэтому я пишу код в app.js и перенаправляю его в другой файл.

person Renish Gotecha    schedule 17.12.2019