├── .gitignore
├── README.md
├── index.js
├── package-lock.json
├── package.json
└── public
└── index.html
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Nodejs-Multer-File-Upload
2 |
3 |
4 |
5 | [](https://nodejs.org/en/)
6 |
7 |
8 |
9 | ### About
10 |
11 | This repo provides minimum setup required for setting up single/multiple file upload routes.
12 | You can read blog version of it on
13 | - Gyaanibuddy
14 | - Medium
15 |
16 |
17 | ------------------------------------------
18 | ### Installation
19 |
20 | Clone the repository and install node modules
21 | ```
22 | git clone https://github.com/RugvedB/Nodejs-Multer-File.git
23 | cd Nodejs-Multer-File
24 | npm i
25 | mkdir uploads
26 | node index.js
27 | ```
28 |
29 | Checkout the site on http://localhost:3000/
30 |
31 |
32 | ------------------------------------------
33 | Developed with :heart: by Rugved
34 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express')
2 | var multer = require('multer')
3 | var port = 3000;
4 |
5 | var app = express()
6 |
7 | var storage = multer.diskStorage({
8 | destination: function (req, file, cb) {
9 | cb(null, './uploads')
10 | },
11 | filename: function (req, file, cb) {
12 | cb(null, file.originalname)
13 | }
14 | })
15 | var upload = multer({ storage: storage })
16 |
17 | /*
18 | app.use('/a',express.static('/b'));
19 | Above line would serve all files/folders inside of the 'b' directory
20 | And make them accessible through http://localhost:3000/a.
21 | */
22 | app.use(express.static(__dirname + '/public'));
23 | app.use('/uploads', express.static('uploads'));
24 |
25 | app.post('/profile-upload-single', upload.single('profile-file'), function (req, res, next) {
26 | // req.file is the `profile-file` file
27 | // req.body will hold the text fields, if there were any
28 | console.log(JSON.stringify(req.file))
29 | var response = 'Home
'
30 | response += "Files uploaded successfully.
"
31 | response += `
`
32 | return res.send(response)
33 | })
34 |
35 | app.post('/profile-upload-multiple', upload.array('profile-files', 12), function (req, res, next) {
36 | // req.files is array of `profile-files` files
37 | // req.body will contain the text fields, if there were any
38 | console.log(JSON.stringify(req.file))
39 | var response = 'Home
'
40 | response += "Files uploaded successfully.
"
41 | for(var i=0;i
`
43 | }
44 |
45 | return res.send(response)
46 | })
47 |
48 |
49 | app.listen(port,() => console.log(`Server running on port ${port}!\nClick http://localhost:3000/`))
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gfg",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11 | "requires": {
12 | "mime-types": "~2.1.24",
13 | "negotiator": "0.6.2"
14 | }
15 | },
16 | "append-field": {
17 | "version": "1.0.0",
18 | "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
19 | "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
20 | },
21 | "array-flatten": {
22 | "version": "1.1.1",
23 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
24 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
25 | },
26 | "body-parser": {
27 | "version": "1.19.0",
28 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
29 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
30 | "requires": {
31 | "bytes": "3.1.0",
32 | "content-type": "~1.0.4",
33 | "debug": "2.6.9",
34 | "depd": "~1.1.2",
35 | "http-errors": "1.7.2",
36 | "iconv-lite": "0.4.24",
37 | "on-finished": "~2.3.0",
38 | "qs": "6.7.0",
39 | "raw-body": "2.4.0",
40 | "type-is": "~1.6.17"
41 | }
42 | },
43 | "buffer-from": {
44 | "version": "1.1.1",
45 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
46 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
47 | },
48 | "busboy": {
49 | "version": "0.2.14",
50 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
51 | "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
52 | "requires": {
53 | "dicer": "0.2.5",
54 | "readable-stream": "1.1.x"
55 | }
56 | },
57 | "bytes": {
58 | "version": "3.1.0",
59 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
60 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
61 | },
62 | "concat-stream": {
63 | "version": "1.6.2",
64 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
65 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
66 | "requires": {
67 | "buffer-from": "^1.0.0",
68 | "inherits": "^2.0.3",
69 | "readable-stream": "^2.2.2",
70 | "typedarray": "^0.0.6"
71 | },
72 | "dependencies": {
73 | "isarray": {
74 | "version": "1.0.0",
75 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
76 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
77 | },
78 | "readable-stream": {
79 | "version": "2.3.7",
80 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
81 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
82 | "requires": {
83 | "core-util-is": "~1.0.0",
84 | "inherits": "~2.0.3",
85 | "isarray": "~1.0.0",
86 | "process-nextick-args": "~2.0.0",
87 | "safe-buffer": "~5.1.1",
88 | "string_decoder": "~1.1.1",
89 | "util-deprecate": "~1.0.1"
90 | }
91 | },
92 | "string_decoder": {
93 | "version": "1.1.1",
94 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
95 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
96 | "requires": {
97 | "safe-buffer": "~5.1.0"
98 | }
99 | }
100 | }
101 | },
102 | "content-disposition": {
103 | "version": "0.5.3",
104 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
105 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
106 | "requires": {
107 | "safe-buffer": "5.1.2"
108 | }
109 | },
110 | "content-type": {
111 | "version": "1.0.4",
112 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
113 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
114 | },
115 | "cookie": {
116 | "version": "0.4.0",
117 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
118 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
119 | },
120 | "cookie-signature": {
121 | "version": "1.0.6",
122 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
123 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
124 | },
125 | "core-util-is": {
126 | "version": "1.0.2",
127 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
128 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
129 | },
130 | "debug": {
131 | "version": "2.6.9",
132 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
133 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
134 | "requires": {
135 | "ms": "2.0.0"
136 | }
137 | },
138 | "depd": {
139 | "version": "1.1.2",
140 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
141 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
142 | },
143 | "destroy": {
144 | "version": "1.0.4",
145 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
146 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
147 | },
148 | "dicer": {
149 | "version": "0.2.5",
150 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
151 | "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
152 | "requires": {
153 | "readable-stream": "1.1.x",
154 | "streamsearch": "0.1.2"
155 | }
156 | },
157 | "ee-first": {
158 | "version": "1.1.1",
159 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
160 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
161 | },
162 | "encodeurl": {
163 | "version": "1.0.2",
164 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
165 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
166 | },
167 | "escape-html": {
168 | "version": "1.0.3",
169 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
170 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
171 | },
172 | "etag": {
173 | "version": "1.8.1",
174 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
175 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
176 | },
177 | "express": {
178 | "version": "4.17.1",
179 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
180 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
181 | "requires": {
182 | "accepts": "~1.3.7",
183 | "array-flatten": "1.1.1",
184 | "body-parser": "1.19.0",
185 | "content-disposition": "0.5.3",
186 | "content-type": "~1.0.4",
187 | "cookie": "0.4.0",
188 | "cookie-signature": "1.0.6",
189 | "debug": "2.6.9",
190 | "depd": "~1.1.2",
191 | "encodeurl": "~1.0.2",
192 | "escape-html": "~1.0.3",
193 | "etag": "~1.8.1",
194 | "finalhandler": "~1.1.2",
195 | "fresh": "0.5.2",
196 | "merge-descriptors": "1.0.1",
197 | "methods": "~1.1.2",
198 | "on-finished": "~2.3.0",
199 | "parseurl": "~1.3.3",
200 | "path-to-regexp": "0.1.7",
201 | "proxy-addr": "~2.0.5",
202 | "qs": "6.7.0",
203 | "range-parser": "~1.2.1",
204 | "safe-buffer": "5.1.2",
205 | "send": "0.17.1",
206 | "serve-static": "1.14.1",
207 | "setprototypeof": "1.1.1",
208 | "statuses": "~1.5.0",
209 | "type-is": "~1.6.18",
210 | "utils-merge": "1.0.1",
211 | "vary": "~1.1.2"
212 | }
213 | },
214 | "finalhandler": {
215 | "version": "1.1.2",
216 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
217 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
218 | "requires": {
219 | "debug": "2.6.9",
220 | "encodeurl": "~1.0.2",
221 | "escape-html": "~1.0.3",
222 | "on-finished": "~2.3.0",
223 | "parseurl": "~1.3.3",
224 | "statuses": "~1.5.0",
225 | "unpipe": "~1.0.0"
226 | }
227 | },
228 | "forwarded": {
229 | "version": "0.1.2",
230 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
231 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
232 | },
233 | "fresh": {
234 | "version": "0.5.2",
235 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
236 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
237 | },
238 | "http-errors": {
239 | "version": "1.7.2",
240 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
241 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
242 | "requires": {
243 | "depd": "~1.1.2",
244 | "inherits": "2.0.3",
245 | "setprototypeof": "1.1.1",
246 | "statuses": ">= 1.5.0 < 2",
247 | "toidentifier": "1.0.0"
248 | }
249 | },
250 | "iconv-lite": {
251 | "version": "0.4.24",
252 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
253 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
254 | "requires": {
255 | "safer-buffer": ">= 2.1.2 < 3"
256 | }
257 | },
258 | "inherits": {
259 | "version": "2.0.3",
260 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
261 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
262 | },
263 | "ipaddr.js": {
264 | "version": "1.9.1",
265 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
266 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
267 | },
268 | "isarray": {
269 | "version": "0.0.1",
270 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
271 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
272 | },
273 | "media-typer": {
274 | "version": "0.3.0",
275 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
276 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
277 | },
278 | "merge-descriptors": {
279 | "version": "1.0.1",
280 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
281 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
282 | },
283 | "methods": {
284 | "version": "1.1.2",
285 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
286 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
287 | },
288 | "mime": {
289 | "version": "1.6.0",
290 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
291 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
292 | },
293 | "mime-db": {
294 | "version": "1.45.0",
295 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
296 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w=="
297 | },
298 | "mime-types": {
299 | "version": "2.1.28",
300 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
301 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
302 | "requires": {
303 | "mime-db": "1.45.0"
304 | }
305 | },
306 | "minimist": {
307 | "version": "1.2.5",
308 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
309 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
310 | },
311 | "mkdirp": {
312 | "version": "0.5.5",
313 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
314 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
315 | "requires": {
316 | "minimist": "^1.2.5"
317 | }
318 | },
319 | "ms": {
320 | "version": "2.0.0",
321 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
322 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
323 | },
324 | "multer": {
325 | "version": "1.4.2",
326 | "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
327 | "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
328 | "requires": {
329 | "append-field": "^1.0.0",
330 | "busboy": "^0.2.11",
331 | "concat-stream": "^1.5.2",
332 | "mkdirp": "^0.5.1",
333 | "object-assign": "^4.1.1",
334 | "on-finished": "^2.3.0",
335 | "type-is": "^1.6.4",
336 | "xtend": "^4.0.0"
337 | }
338 | },
339 | "negotiator": {
340 | "version": "0.6.2",
341 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
342 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
343 | },
344 | "object-assign": {
345 | "version": "4.1.1",
346 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
347 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
348 | },
349 | "on-finished": {
350 | "version": "2.3.0",
351 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
352 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
353 | "requires": {
354 | "ee-first": "1.1.1"
355 | }
356 | },
357 | "parseurl": {
358 | "version": "1.3.3",
359 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
360 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
361 | },
362 | "path-to-regexp": {
363 | "version": "0.1.7",
364 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
365 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
366 | },
367 | "process-nextick-args": {
368 | "version": "2.0.1",
369 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
370 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
371 | },
372 | "proxy-addr": {
373 | "version": "2.0.6",
374 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
375 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
376 | "requires": {
377 | "forwarded": "~0.1.2",
378 | "ipaddr.js": "1.9.1"
379 | }
380 | },
381 | "qs": {
382 | "version": "6.7.0",
383 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
384 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
385 | },
386 | "range-parser": {
387 | "version": "1.2.1",
388 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
389 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
390 | },
391 | "raw-body": {
392 | "version": "2.4.0",
393 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
394 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
395 | "requires": {
396 | "bytes": "3.1.0",
397 | "http-errors": "1.7.2",
398 | "iconv-lite": "0.4.24",
399 | "unpipe": "1.0.0"
400 | }
401 | },
402 | "readable-stream": {
403 | "version": "1.1.14",
404 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
405 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
406 | "requires": {
407 | "core-util-is": "~1.0.0",
408 | "inherits": "~2.0.1",
409 | "isarray": "0.0.1",
410 | "string_decoder": "~0.10.x"
411 | }
412 | },
413 | "safe-buffer": {
414 | "version": "5.1.2",
415 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
416 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
417 | },
418 | "safer-buffer": {
419 | "version": "2.1.2",
420 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
421 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
422 | },
423 | "send": {
424 | "version": "0.17.1",
425 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
426 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
427 | "requires": {
428 | "debug": "2.6.9",
429 | "depd": "~1.1.2",
430 | "destroy": "~1.0.4",
431 | "encodeurl": "~1.0.2",
432 | "escape-html": "~1.0.3",
433 | "etag": "~1.8.1",
434 | "fresh": "0.5.2",
435 | "http-errors": "~1.7.2",
436 | "mime": "1.6.0",
437 | "ms": "2.1.1",
438 | "on-finished": "~2.3.0",
439 | "range-parser": "~1.2.1",
440 | "statuses": "~1.5.0"
441 | },
442 | "dependencies": {
443 | "ms": {
444 | "version": "2.1.1",
445 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
446 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
447 | }
448 | }
449 | },
450 | "serve-static": {
451 | "version": "1.14.1",
452 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
453 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
454 | "requires": {
455 | "encodeurl": "~1.0.2",
456 | "escape-html": "~1.0.3",
457 | "parseurl": "~1.3.3",
458 | "send": "0.17.1"
459 | }
460 | },
461 | "setprototypeof": {
462 | "version": "1.1.1",
463 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
464 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
465 | },
466 | "statuses": {
467 | "version": "1.5.0",
468 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
469 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
470 | },
471 | "streamsearch": {
472 | "version": "0.1.2",
473 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
474 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
475 | },
476 | "string_decoder": {
477 | "version": "0.10.31",
478 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
479 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
480 | },
481 | "toidentifier": {
482 | "version": "1.0.0",
483 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
484 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
485 | },
486 | "type-is": {
487 | "version": "1.6.18",
488 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
489 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
490 | "requires": {
491 | "media-typer": "0.3.0",
492 | "mime-types": "~2.1.24"
493 | }
494 | },
495 | "typedarray": {
496 | "version": "0.0.6",
497 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
498 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
499 | },
500 | "unpipe": {
501 | "version": "1.0.0",
502 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
503 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
504 | },
505 | "util-deprecate": {
506 | "version": "1.0.2",
507 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
508 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
509 | },
510 | "utils-merge": {
511 | "version": "1.0.1",
512 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
513 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
514 | },
515 | "vary": {
516 | "version": "1.1.2",
517 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
518 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
519 | },
520 | "xtend": {
521 | "version": "4.0.2",
522 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
523 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
524 | }
525 | }
526 | }
527 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gfg",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "express": "^4.17.1",
14 | "multer": "^1.4.2"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Profile form
4 |
5 |
6 |
15 |
16 |
17 |
18 |
27 |
28 |