├── .gitignore ├── src ├── controllers │ ├── home.js │ └── upload.js ├── server.js ├── routes │ └── web.js ├── middleware │ └── upload.js └── views │ └── index.html ├── README.md └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json -------------------------------------------------------------------------------- /src/controllers/home.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | 3 | const home = (req, res) => { 4 | return res.sendFile(path.join(`${__dirname}/../views/index.html`)); 5 | }; 6 | 7 | module.exports = { 8 | getHome: home 9 | }; 10 | -------------------------------------------------------------------------------- /src/server.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | const initRoutes = require("./routes/web"); 4 | 5 | app.use(express.urlencoded({ extended: true })); 6 | initRoutes(app); 7 | 8 | let port = 3000; 9 | app.listen(port, () => { 10 | console.log(`Running at localhost:${port}`); 11 | }); 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node.js Upload multiple files example 2 | 3 | For more detail, please visit: 4 | > [How to upload multiple files in Node.js using Multer](https://bezkoder.com/node-js-upload-multiple-files/) 5 | 6 | ## Project setup 7 | ``` 8 | npm install 9 | ``` 10 | 11 | ### Run 12 | ``` 13 | node src/server.js 14 | ``` 15 | -------------------------------------------------------------------------------- /src/routes/web.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const homeController = require("../controllers/home"); 4 | const uploadController = require("../controllers/upload"); 5 | 6 | let routes = app => { 7 | router.get("/", homeController.getHome); 8 | 9 | router.post("/multiple-upload", uploadController.multipleUpload); 10 | 11 | return app.use("/", router); 12 | }; 13 | 14 | module.exports = routes; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "upload-multiple-files", 3 | "version": "1.0.0", 4 | "description": "Node.js upload multiple files Demo", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "node", 11 | "upload", 12 | "multiple", 13 | "files" 14 | ], 15 | "author": "bezkoder", 16 | "license": "ISC", 17 | "dependencies": { 18 | "express": "^4.17.1", 19 | "multer": "^1.4.2" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/controllers/upload.js: -------------------------------------------------------------------------------- 1 | const upload = require("../middleware/upload"); 2 | 3 | const multipleUpload = async (req, res) => { 4 | try { 5 | await upload(req, res); 6 | console.log(req.files); 7 | 8 | if (req.files.length <= 0) { 9 | return res.send(`You must select at least 1 file.`); 10 | } 11 | 12 | return res.send(`Files has been uploaded.`); 13 | } catch (error) { 14 | console.log(error); 15 | 16 | if (error.code === "LIMIT_UNEXPECTED_FILE") { 17 | return res.send("Too many files to upload."); 18 | } 19 | return res.send(`Error when trying upload many files: ${error}`); 20 | } 21 | }; 22 | 23 | module.exports = { 24 | multipleUpload: multipleUpload 25 | }; -------------------------------------------------------------------------------- /src/middleware/upload.js: -------------------------------------------------------------------------------- 1 | const util = require("util"); 2 | const path = require("path"); 3 | const multer = require("multer"); 4 | 5 | var storage = multer.diskStorage({ 6 | destination: (req, file, callback) => { 7 | callback(null, path.join(`${__dirname}/../../upload`)); 8 | }, 9 | filename: (req, file, callback) => { 10 | const match = ["image/png", "image/jpeg"]; 11 | 12 | if (match.indexOf(file.mimetype) === -1) { 13 | var message = `${file.originalname} is invalid. Only accept png/jpeg.`; 14 | return callback(message, null); 15 | } 16 | 17 | var filename = `${Date.now()}-bezkoder-${file.originalname}`; 18 | callback(null, filename); 19 | } 20 | }); 21 | 22 | var uploadFiles = multer({ storage: storage }).array("multi-files", 10); 23 | var uploadFilesMiddleware = util.promisify(uploadFiles); 24 | module.exports = uploadFilesMiddleware; -------------------------------------------------------------------------------- /src/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Node.js upload multiple files 8 | 9 | 14 | 15 | 16 |
17 |
18 |
19 |

Node.js upload multiple files - bezkoder.com

20 | 21 |
22 |
23 | 24 | 25 |
26 | 27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | 38 | 39 | 60 | 61 | 62 | --------------------------------------------------------------------------------