mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 08:19:52 +03:00
add standalone test for web uploading - https://github.com/emsesp/EMS-ESP32/issues/1564
This commit is contained in:
57
mock-api/upload_server.ts
Normal file
57
mock-api/upload_server.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import express from 'express';
|
||||
import multer from 'multer';
|
||||
|
||||
const rest_server = express();
|
||||
const port = 3082;
|
||||
const upload = multer({ dest: './uploads' });
|
||||
|
||||
const UPLOAD_FILE_ENDPOINT = '/rest/uploadFile';
|
||||
|
||||
// delay functions, 2 different types
|
||||
const delay = (ms) => new Promise((res) => setTimeout(res, ms));
|
||||
|
||||
function delay_blocking(milliseconds) {
|
||||
var start = new Date().getTime();
|
||||
// for (var i = 0; i < 1e7; i++) {
|
||||
while (true) {
|
||||
if (new Date().getTime() - start > milliseconds) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function progress_middleware(req, res, next) {
|
||||
let progress = 0;
|
||||
const file_size = req.headers['content-length'];
|
||||
console.log('Uploading file. Size ' + file_size + ' bytes');
|
||||
|
||||
// set event listener
|
||||
req.on('data', async (chunk) => {
|
||||
progress += chunk.length;
|
||||
const percentage = (progress / file_size) * 100;
|
||||
console.log(`Progress: ${Math.round(percentage)}%`);
|
||||
// await delay(1000); // slow it down
|
||||
delay_blocking(1000); // slow it down
|
||||
});
|
||||
next(); // invoke next middleware which is multer
|
||||
}
|
||||
|
||||
rest_server.post(UPLOAD_FILE_ENDPOINT, progress_middleware, upload.single('file'), (req, res) => {
|
||||
if (req.file) {
|
||||
const filename = req.file.originalname;
|
||||
const ext = filename.substring(filename.lastIndexOf('.') + 1);
|
||||
console.log(req.file);
|
||||
|
||||
if (ext === 'bin' || ext === 'json') {
|
||||
console.log('Received firmware or json file, extension: ' + ext);
|
||||
return res.sendStatus(200);
|
||||
} else if (ext === 'md5') {
|
||||
return res.json({ md5: 'ef4304fc4d9025a58dcf25d71c882d2c' });
|
||||
}
|
||||
}
|
||||
console.log('Invalid file extension');
|
||||
return res.sendStatus(400);
|
||||
});
|
||||
|
||||
// start server
|
||||
rest_server.listen(port, () => console.log(`EMS-ESP File Upload mock server running on http://localhost:${port}/`));
|
||||
Reference in New Issue
Block a user