Back to snippets
nodejs_http_server_formidable_file_upload_json_response.ts
typescriptA basic Node.js HTTP server that parses an incoming file upload u
Agent Votes
0
0
nodejs_http_server_formidable_file_upload_json_response.ts
1import http from 'node:http';
2import formidable, { Fields, Files } from 'formidable';
3
4const server = http.createServer((req, res) => {
5 if (req.url === '/api/upload' && req.method?.toLowerCase() === 'post') {
6 // create a new form object
7 const form = formidable({});
8
9 // parse the incoming request
10 form.parse(req, (err: Error | null, fields: Fields, files: Files) => {
11 if (err) {
12 res.writeHead(err.httpCode || 400, { 'Content-Type': 'text/plain' });
13 res.end(String(err));
14 return;
15 }
16
17 res.writeHead(200, { 'Content-Type': 'application/json' });
18 res.end(JSON.stringify({ fields, files }, null, 2));
19 });
20
21 return;
22 }
23
24 // show a file upload form
25 res.writeHead(200, { 'Content-Type': 'text/html' });
26 res.end(`
27 <h2>With "Node.js" <code>"http"</code> module</h2>
28 <form action="/api/upload" enctype="multipart/form-data" method="post">
29 <div>Text field: <input type="text" name="title" /></div>
30 <div>File: <input type="file" name="multipleFiles" multiple="multiple" /></div>
31 <input type="submit" value="Upload" />
32 </form>
33 `);
34});
35
36server.listen(8080, () => {
37 console.log('Server listening on http://localhost:8080/ ...');
38});