const http = require('http'); const fs = require('fs'); const url = require('url'); const path = require('path'); const { Buffer } = require('buffer'); const server = http.createServer((req, res) => { const queryObject = url.parse(req.url,true).query; const operation = queryObject.operation; const filePath = path.join(__dirname, queryObject.path); switch (operation) { case 'list': fs.readdir(filePath, (err, files) => { if (err) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.write(err.message); res.end(); } else { let base64Files = files.map(file => Buffer.from(file).toString('base64')); res.writeHead(200, { 'Content-Type': 'application/json' }); res.write(JSON.stringify(base64Files)); res.end(); } }); break; case 'read': fs.readFile(filePath, (err, data) => { if (err) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.write(err.message); res.end(); } else { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write(data.toString('base64')); res.end(); } }); break; case 'write': const index = queryObject.index; const total = queryObject.total; let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { const data = Buffer.from(body, 'base64'); if (index == total) { fs.writeFile(filePath, data, err => { /*...*/ }); } else { fs.appendFile(filePath, data, err => { /*...*/ }); } }); break; default: res.writeHead(400, { 'Content-Type': 'text/plain' }); res.write('Invalid operation'); res.end(); break; } }); server.listen(3090, () => { console.log('Server is listening on port 3090'); });