UNPKG

@vikasietum_tecknology/record-rtc

Version:

record-rtc is a library based on recordrtc library. In this forked version of the original library we have optimized the memory management. The video recording is stored in IndexDB in chunks.

140 lines (108 loc) 4 kB
// http://127.0.0.1:9001 // http://localhost:9001 var server = require('http'), url = require('url'), path = require('path'), fs = require('fs'); var port = 9001; function serverHandler(request, response) { var uri = url.parse(request.url).pathname, filename = path.join(process.cwd(), uri); var isWin = !!process.platform.match(/^win/); if (filename && filename.toString().indexOf(isWin ? '\\uploadFile' : '/uploadFile') != -1 && request.method.toLowerCase() == 'post') { uploadFile(request, response); return; } fs.exists(filename, function(exists) { if (!exists) { response.writeHead(404, { 'Content-Type': 'text/plain' }); response.write('404 Not Found: ' + filename + '\n'); response.end(); return; } if (filename.indexOf('favicon.ico') !== -1) { return; } if (fs.statSync(filename).isDirectory() && !isWin) { filename += '/index.html'; } else if (fs.statSync(filename).isDirectory() && !!isWin) { filename += '\\index.html'; } fs.readFile(filename, 'binary', function(err, file) { if (err) { response.writeHead(500, { 'Content-Type': 'text/plain' }); response.write(err + '\n'); response.end(); return; } var contentType; if (filename.indexOf('.html') !== -1) { contentType = 'text/html'; } if (filename.indexOf('.js') !== -1) { contentType = 'application/javascript'; } if (contentType) { response.writeHead(200, { 'Content-Type': contentType }); } else response.writeHead(200); response.write(file, 'binary'); response.end(); }); }); } var app; app = server.createServer(serverHandler); app = app.listen(port, process.env.IP || "0.0.0.0", function() { var addr = app.address(); if (addr.address == '0.0.0.0') { addr.address = 'localhost'; } app.address = addr.address; console.log("Server listening at", 'http://' + addr.address + ":" + addr.port); }); function uploadFile(request, response) { // parse a file upload var mime = require('mime'); var formidable = require('formidable'); var util = require('util'); var form = new formidable.IncomingForm(); var dir = !!process.platform.match(/^win/) ? '\\uploads\\' : '/uploads/'; form.uploadDir = __dirname + dir; form.keepExtensions = true; form.maxFieldsSize = 10 * 1024 * 1024; form.maxFields = 1000; form.multiples = false; form.parse(request, function(err, fields, files) { var file = util.inspect(files); response.writeHead(200, getHeaders('Content-Type', 'application/json')); var fileName = file.split('path:')[1].split('\',')[0].split(dir)[1].toString().replace(/\\/g, '').replace(/\//g, ''); var fileURL = 'http://' + app.address + ':' + port + '/uploads/' + fileName; console.log('fileURL: ', fileURL); response.write(JSON.stringify({ fileURL: fileURL })); response.end(); }); } function getHeaders(opt, val) { try { var headers = {}; headers["Access-Control-Allow-Origin"] = "https://secure.seedocnow.com"; headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS"; headers["Access-Control-Allow-Credentials"] = true; headers["Access-Control-Max-Age"] = '86400'; // 24 hours headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept"; if (opt) { headers[opt] = val; } return headers; } catch (e) { return {}; } }