Я пытаюсь переименовать файл изображения, загруженный с помощью multer по параметрам запроса.node.js multer переименовать загруженный файл
Вот мой код:
router.route('/upload/:userid')
.post(multer({
dest: 'uploads/'
}), function(req,res){
fs.readFile('uploads/' + req.files.file.name, function(err, data) {
fs.writeFile('uploads/' + req.params.userid + '.' + req.files.file.extension, data, function(err) {
fs.unlink('uploads/' + req.files.file.name, function(){
if(err) throw err;
});
});
});
res.json({ message: 'Successfully uploaded image!' });
});
Он отлично работает, но мне было интересно, если существует что-то чище и проще с функцией multer переименования.
Он уже пытался что-то вроде этого:
router.route('/upload/:userid')
.post(multer({
dest: 'uploads/',
rename: function(req,res) {
return req.params.userid
}
}), function(req,res){
res.json({ message: 'Successfully uploaded image!' });
});
Но это не работает, потому что REQ не заселена еще (не определен).
Я использую httpie проверить свой код с помощью следующей команды:
http.exe -f POST http://localhost:8080/upload/171284 [email protected]:\....\cat.jpg
Можно ли использовать переименовать функцию multer, чтобы делать то, что я делаю с фс? Или есть лучший способ?
Благодарим вас за отзыв.
Томас
EDIT
Мой новый код с помощью diskStorage:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, req.params.userid + '-')
}
})
var upload = multer({ storage: storage })
router.route('/upload/:userid')
.post(multer({
storage: storage
}), function(req,res){
res.json({ message: 'Successfully uploaded image!' });
});
Это выдает ошибку:
Error: Route.post() requires callback functions but got a [object Object]
Спасибо @Festo. Но как я могу поместить его в свой router.route .post? Мне пришлось обновить до последней версии multer для использования diskStorage, и теперь мой код выше некорректен. – Thomi
@Thomi Трудно сказать, в чем проблема без вашего обновленного кода. – Festo
Я только что редактировал свой пост. – Thomi