Reputation: 1245
I am using Multer to upload some files and I would like to upload files to different folders depending on which user uploads them.
This is my code:
server.js
app.use('/', require('./routes'));
app.use(express.static('public'));
routes/index.js
var teacher = require('./teachers.js');
router.post('/teachers/{id}/upload', teacher.uploadAvatar);
routes/teachers.js
var multer = require('multer');
var upload = multer({ dest: 'public/uploads/teacher/' }).single('avatar');
uploadAvatar: function(req, res) {
upload(req, res, function(err) {
console.log(req.body);
console.log(req.file);
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
}
Files are uploaded perfectly fine but I would like to create separate folders for each user. Folder name should be user's id. I can access user's id like this:
teacherId: req.params.id
Ideally, I also plan to rename uploaded file.
Upvotes: 0
Views: 4237
Reputation: 382
You can use express router and in every route initialize new upload instance and use it as a middleware, example:
const createPost = require('./routes/createPost');
app.use('/create-post', createPost);
And then in routes/createPost.js:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer({ dest: 'uploads/new_destination' });
router.post('/', upload.single('imageToPost'), async(req, res) => {
res.sendStatus(201);
});
module.exports = router;
Upvotes: 0
Reputation: 140
From what I know, you can't change the destination dynamically. You can move the files once they are updated. Please find the below issue and answer posted in github,
https://github.com/expressjs/multer/issues/39
Upvotes: 0
Reputation: 2651
var multer = require('multer')
var mkdirp = require('mkdirp');
uploadAvatar: function(req, res) {
mkdirp('public/uploads/' + req.params.id , function(err) {
var upload = multer({ dest: 'public/uploads/' + req.params.id }).single('avatar');
upload(req, res, function(err) {
console.log(req.body);
console.log(req.file);
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
});
}
That should work
Upvotes: 3