node.jsexpressmultermulter-gridfs-storage

How do i add new field other than multer-gridfs-storage default properties


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')
});

Solution

  • 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.