Upload file with expressjs and multer – javascript

Config multer

// Multer upload config
const fs = require('fs');
const path = require('path');
const multer = require('multer');
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, '/tmp/')
    },
    filename: function (req, file, cb) {
        const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
        cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname))
    }
})
const upload = multer({storage: storage});

Single file

app.post('/uploadPhoto', (req, res, next) => {
	upload.single('filename_here')(req, res, function (err) {
        if (err) {
            // A Multer error occurred when uploading.
            res.json({msg: err.message})
        } else {
            // Everything went fine.
            // req.file
            // {
            //   fieldname: 'filename_here',
            //   originalname: 'nhancv_dep_trai.png',
            //   encoding: '7bit',
            //   mimetype: 'image/png',
            //   destination: '/tmp/',
            //   filename: 'filename_here-1607694392023-220481630',
            //   path: '/tmp/filename_here-1607694392023-220481630',
            //   size: 5907
            // }
            const file = req.file;
            console.log(file);

            // Delete tmp
            try {
                // fs.unlinkSync(file.path);
            } catch (e) {
                // Ignore
                console.error(e);
            }
            res.json({msg: 'ok'});
        }
    });
})

Test
curl --location --request POST '<host>:<port>/uploadPhoto' \
--form 'filename_here=@"/Users/nhancv/Desktop/nhancv_dep_trai.png"'

Multi files

const fields = [{ name: 'front', maxCount: 1 }, { name: 'back', maxCount: 1 }]
app.post('/uploadPhoto', (req, res, next) => {
    upload.fields(fields)(req, res, function (err) {
        if (err) {
            // A Multer error occurred when uploading.
            res.json({msg: err.message})
        } else {
            // Everything went fine.
            // file
            // {
            //   fieldname: 'xxx',
            //   originalname: 'Screen Shot 2020-12-11 at 20.28.29.png',
            //   encoding: '7bit',
            //   mimetype: 'image/png',
            //   destination: '/tmp/',
            //   filename: 'xxx-1607694392023-220481630',
            //   path: '/tmp/xxx-1607694392023-220481630',
            //   size: 5907
            // }

            // array of `photos` files
            const frontF = req.files['front'][0];
            const backF = req.files['back'][0];
            console.log('frontF', frontF);
            console.log('backF', backF);

            // Delete tmp
            try {
                // fs.unlinkSync(file.path);
            } catch (e) {
                // Ignore
                console.error(e);
            }
            res.json({msg: 'ok'});
        }
    });
});

Test
curl --location --request POST '<host>:<port>/users/uploadPhotos' \
     --header 'Authorization: Bearer <token>' \
     --form 'front=@"/Users/nhancv/Desktop/nhancv_dep_trai_1.png"' \
     --form 'back=@"/Users/nhancv/Desktop/nhancv_dep_trai_2.png"'

@nhancv

Leave a Reply

Your email address will not be published.Required fields are marked *