2016-04-26 2 views
0

Я пытаюсь загрузить файл в конкретный каталог на диске. Я использую библиотеку multer. И насколько я понимаю этот код и как он выглядит сейчас, когда он получает запрос, он берет файл и пытается его сохранить, и он происходит отдельно от остальной части запроса. Есть ли способ получить доступ к полному запросу, скажем, функции назначения (# 1). Вот мой кодЗагрузка файла NodeJS с помощью multer

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     console.log(req) // #1 here i dont see other fields from request 
     callback(null, './uploads') 
    }, 
    filename: function (req, file, callback) { 
     callback(null, Date.now() + '-' + file.originalname) 
    } 
}) 

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

router.post('/api/photos', function (req, res, next) { 
    upload(req, res, function(err) { 
     console.log(req) // here i see other fields from request like req.body.description 
     if (err) {return next(err)} 
     res.json(201) 
    }) 
}); 

То, что я хотел бы на самом деле сделать, это сказать multer. «Эй, я хочу, чтобы вы сохранили файл в каталоге/uploads/restOfThePat». Где restOfThePath передается в запросе.

Я знаю, что я могу изменить местоположение файла позже (не пробовал это, не знаю, работает ли он). Однако, похоже, это хакки, и я не могу поверить, что это невозможно, как другие чистые способы. Очевидно, что multer не является обязательным, если есть какая-то другая библиотека, которую я бы хотел посмотреть.

+0

в любом случае этот файл сохраняет в папку закачек, внутри router.post («/ API/фото») вы будете получите оставшуюся часть запроса, проверьте это поле, используя «req.body.form_field» после этого, если вы хотите изменить путь назначения, перемещайте файл из папки для загрузки везде, где вам нужно использовать fs –

ответ

1

Вы можете сделать это:

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     console.log(req); 
     callback(null, req.body.what_you_want); 
    }, 
    filename: function (req, file, callback) { 
     callback(null, Date.now() + '-' + file.originalname); 
    } 
}) 

var upload = multer({ storage: storage }); 

router.post('/api/photos', upload.single('the_name') function (req, res, next) { 
    upload(req, res, function(err) { 
     console.log(req) // here i see other fields from request like req.body.description 
     if (err) {return next(err)} 
     res.json(201) 
    }) 
}); 

Он работает как шарм ...

Смежные вопросы