Back to snippets

nodejs_http_server_formidable_file_upload_json_response.ts

typescript

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