I wanted to add new fields (objects) other than multer-gridfs-storage default fields but to no avail, the fields I want to add are:
The default field has something like
instead, want to add something like
And also is there a way to add a thumbnail to file so I don't I have reference my file id to the thumbnail in another collection
const storage = new GridFsStorage({
url: config.db,
file: (req, file) => {
return new Promise((resolve, reject) => {
const filename = req.body.fileName + path.extname(file.originalname);
const Description = req.body.Description
const fileInfo = {
filename: filename,
bucketName: 'contents',
metadata: req.body,
}
resolve(fileInfo, Description);
});
}
});
const upload = multer({
storage
});
router.get('/', (req, res) => {
res.render('index');
console.log(req.body)
});
//** uploading file to the db */
router.post('/', upload.any(), (req, res) => {
res.redirect('/upload/files')
});
Those properties are populated by multer and further enhanced by whatever storage engine you are using, in this case multer-gridfs-storage when the file is stored. You won't be able to manipulate those yourself because they are generated when the file is parsed in the request and then when it is stored in the database.
Instead of using metadata to store your business logic you should use a framework like mongoose and store that information on a collection and use an id field to get a link to your file. Something like this
const Movie = mongoose.model('Movie', {
description: String,
category: String,
token: String,
fileId: Schema.Types.ObjectId
});
Read your fields from the body and save them using this collection to the database and use the autogenerated _id
of your file as the fileId
. This way you can easily query your data and still have a handle to the file available.