555 lines
23 KiB
JavaScript
555 lines
23 KiB
JavaScript
const express = require('express')
|
||
const fs = require('fs')
|
||
const db = require('./app/db')
|
||
const app = express()
|
||
const cors = require("cors");
|
||
const multer = require('multer')
|
||
|
||
require('dotenv').config();
|
||
|
||
const ENV_PARAM = process.env;
|
||
// const videoFileMap2={
|
||
// 'cdn':'videos/v1.mp4',
|
||
// 'generate-pass':'videos/v2.mp4',
|
||
// 'get-post':'videos/v3.mp4',
|
||
// 'tt1':'/opt/wrenchboard/TEST/COMMON/MEDIA/What Is Single Sign-on (SSO)? How It Works-(1080p25).mp4',
|
||
// 'tt2':'/opt/wrenchboard/TEST/COMMON/MEDIA/What is RabbitMQ?-(1080p30).mp4',
|
||
// 'tt3':'/opt/wrenchboard/TEST/COMMON/MEDIA/What is CORS?-(1080p50).mp4',
|
||
// 'tt4':'/opt/wrenchboard/TEST/COMMON/MEDIA/SAML vs OAuth vs OIDC (explained simply!)-(1080p25).mp4',
|
||
// 'tt5':'/opt/wrenchboard/TEST/COMMON/MEDIA/Running RabbitMQ Locally with Docker-(1080p60).mp4',
|
||
// 'tt6':'/opt/wrenchboard/TEST/COMMON/MEDIA/React Proxy | Easiest Fix to CORS Errors-(2160p24).mp4',
|
||
// 'tt7':'/opt/wrenchboard/TEST/COMMON/MEDIA/RabbitMQ Tutorial - Publisher and Consumer program with example in nodeJS-(686p30).mp4',
|
||
// 'tt8':'/opt/wrenchboard/TEST/COMMON/MEDIA/RabbitMQ - RPC with NodeJs (request-reply pattern)-(1080p60).mp4',
|
||
// 'tt9':'/opt/wrenchboard/TEST/COMMON/MEDIA/How to Install RabbitMQ Locally with Docker-(1080p60).mp4',
|
||
// }
|
||
|
||
// const videoFileMap={
|
||
// 'cdn':'videos/v1.mp4',
|
||
// 'generate-pass':'videos/v2.mp4',
|
||
// 'get-post':'videos/v3.mp4',
|
||
// 'tt1':'What Is Single Sign-on (SSO)? How It Works-(1080p25).mp4',
|
||
// 'tt2':'What is RabbitMQ?-(1080p30).mp4',
|
||
// 'tt3':'What is CORS?-(1080p50).mp4',
|
||
// 'tt4':'SAML vs OAuth vs OIDC (explained simply!)-(1080p25).mp4',
|
||
// 'tt5':'Running RabbitMQ Locally with Docker-(1080p60).mp4',
|
||
// 'tt6':'React Proxy | Easiest Fix to CORS Errors-(2160p24).mp4',
|
||
// 'tt7':'RabbitMQ Tutorial - Publisher and Consumer program with example in nodeJS-(686p30).mp4',
|
||
// 'tt8':'RabbitMQ - RPC with NodeJs (request-reply pattern)-(1080p60).mp4',
|
||
// 'tt9':'How to Install RabbitMQ Locally with Docker-(1080p60).mp4',
|
||
// }
|
||
//https://dev140.apitest.wrenchboard.com/
|
||
// http://127.0.0.1:3000/
|
||
|
||
console.log("Finding File");
|
||
|
||
var corsOptions = {
|
||
origin: 'http://127.0.0.1:3000/',
|
||
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
|
||
}
|
||
|
||
//app.use(cors(corsOptions));
|
||
app.use(cors());
|
||
// ,cors(corsOptions)
|
||
|
||
const storage = multer.diskStorage({
|
||
destination: function(req, file, cb) {
|
||
console.log(" process.env.COMMON_DUMMY_PATH-> ", process.env.COMMON_DUMMY_PATH)
|
||
return cb(null, 'wrenchboard/wrenchboard/TEST/DUMMY')
|
||
//return cb(null, '/usr/src/app/videos')
|
||
},
|
||
filename: function (req, file, cb) {
|
||
console.log("WHAT FILE ---- > ", file, req );
|
||
return cb(null, `${Date.now()}_${file.originalname}`)
|
||
}
|
||
})
|
||
|
||
const upload = multer({storage})
|
||
app.post('/upload/task', upload.single('file'), (req, res) => {
|
||
console.log(req.body)
|
||
console.log(req.file)
|
||
|
||
let uid = req.body.uid;
|
||
let job_uid = req.body.job_uid;
|
||
console.log(" req.body.uid -> ", uid)
|
||
console.log(" req.body.job_uid -> ", job_uid)
|
||
console.log(" process.env.COMMON_TASKF_PATH-> ", process.env.COMMON_TASKF_PATH)
|
||
|
||
let destinationDir = process.env.COMMON_TASKF_PATH !== undefined ? process.env.COMMON_TASKF_PATH : '/opt/wrenchboard/TEST/TASKFILE';
|
||
|
||
const fs = require('fs');
|
||
const dir = destinationDir + "/" + job_uid;
|
||
if (!fs.existsSync(dir)) {
|
||
fs.mkdirSync(dir);
|
||
}
|
||
|
||
const oldPath = req.file.path;
|
||
const newPath = dir + "/" + req.file.filename;
|
||
var result_list ='';
|
||
fs.rename(oldPath, newPath, function (err) {
|
||
if (err) throw err
|
||
console.log('Successfully renamed - AKA moved!');
|
||
console.log('Start::Database Registration!');
|
||
|
||
|
||
var data = {
|
||
"member_uid": req.body.uid,
|
||
"job_uid": req.body.job_uid,
|
||
"filename": req.file.filename,
|
||
"originalname": req.file.originalname,
|
||
"mimetype": req.file.mimetype,
|
||
"size": req.file.size,
|
||
"encoding": req.file.encoding
|
||
};
|
||
|
||
console.log("DATA - > ", data);
|
||
|
||
var queryText = 'INSERT INTO members_jobs_files( member_uid,job_uid,filename,originalname,mimetype,size,encoding ) VALUES($1,$2,$3,$4,$5,$6,$7) RETURNING uid';
|
||
db.query(queryText, [data.member_uid,data.job_uid,data.filename,data.originalname,data.mimetype,data.size,data.encoding], function(dbErr, result) {
|
||
if (dbErr) {
|
||
console.log("DataError - > ", dbErr.toString());
|
||
}else{
|
||
console.log("DB Result - > " , result.rows);
|
||
result_list = result.rows;
|
||
}
|
||
console.log('End::Database Registration!');
|
||
})
|
||
return res.status(200).json({'status': 'Completed', 'internal_return': 0, 'result_list': result_list })
|
||
//return res.status(200).send('Completed')
|
||
})
|
||
})
|
||
|
||
app.post('/upload/contract', upload.single('file'), (req, res) => {
|
||
|
||
// console.log("req.body = > ",req.body);
|
||
// console.log("res.body = > ",res.body);
|
||
// console.log("req = > ",req);
|
||
// console.log("res = > ",res);
|
||
|
||
|
||
// const file_size = req.file.size;
|
||
// const file_name = req.file.originalname;
|
||
// const file_type = req.file.mimetype;
|
||
// const file_encoding = req.file.encoding;
|
||
|
||
let member_id = req.body.member_id;
|
||
let contract = req.body.contract;
|
||
console.log("******** 01 req.body.member_id -> ", member_id)
|
||
console.log("******** 02 req.body.contract -> ", contract)
|
||
console.log("******** 03 process.env.COMMON_CONTRACT_PATH-> ", process.env.COMMON_CONTRACT_PATH)
|
||
console.log("******** 04 ENV_PARAM.COMMON_CONTRACT_PATH -> ", ENV_PARAM.COMMON_CONTRACT_PATH)
|
||
|
||
|
||
let destinationDir = process.env.COMMON_CONTRACT_PATH !== undefined ? process.env.COMMON_CONTRACT_PATH : 'wrenchboard/wrenchboard/TEST/CONTRACTS';
|
||
|
||
const fs = require('fs');
|
||
const dir = destinationDir + "/" + contract;
|
||
if (!fs.existsSync(dir)) {
|
||
fs.mkdirSync(dir);
|
||
}
|
||
|
||
console.log("DESTINATION FOLDER == == " , dir);
|
||
|
||
const oldPath = req.file.path;
|
||
const newPath = dir + "/" + req.file.filename;
|
||
var result_list ='';
|
||
fs.rename(oldPath, newPath, function (err) {
|
||
if (err) throw err
|
||
console.log('Successfully renamed - AKA moved!');
|
||
console.log('Start::Database Registration!');
|
||
|
||
|
||
var data2 = {
|
||
"member_id": member_id,
|
||
"contract": req.body.contract,
|
||
"msg_type": req.body.msg_type,
|
||
"filename": req.file.filename,
|
||
"originalname": req.file.originalname,
|
||
"mimetype": req.file.mimetype,
|
||
"size": req.file.mimetype,
|
||
"encoding": req.file.encoding
|
||
};
|
||
|
||
var data = {
|
||
"member_id": member_id,
|
||
"contract": req.body.contract,
|
||
"msg_type": req.body.msg_type,
|
||
"filename": req.file.filename,
|
||
"originalname": req.file.originalname,
|
||
"mimetype": req.file.mimetype,
|
||
"encoding": req.file.encoding
|
||
};
|
||
|
||
console.log("DATA - > ", data);
|
||
|
||
var queryText = 'INSERT INTO jobs_contract_message( member_id,contract,msg_type,message ) VALUES($1,$2,$3,$4) RETURNING uid';
|
||
db.query(queryText, [data.member_id, data.contract, data.msg_type, data.filename], function(dbErr, result) {
|
||
if (dbErr) {
|
||
console.log("DataError - > ", dbErr.toString());
|
||
}else{
|
||
console.log("DB Result - > " , result.rows);
|
||
result_list = result.rows;
|
||
}
|
||
console.log('End::Database Registration!');
|
||
})
|
||
|
||
return res.status(200).json({'status': 'Completed', 'internal_return': 0, 'result_list': result_list })
|
||
//return res.status(200).send('Completed')
|
||
})
|
||
})
|
||
|
||
app.post("/upload/resources", upload.array("files"), (req, res) => {
|
||
// Sets multer to intercept files named "files" on uploaded form data
|
||
let result_list =[];
|
||
console.log(req.body); // Logs form body values
|
||
let destinationDir = process.env.COMMON_MYFILE_PATH !== undefined ? process.env.COMMON_MYFILE_PATH : '/opt/wrenchboard/TEST/PROFILE';
|
||
const fs = require('fs');
|
||
const dir = destinationDir + "/" + req.body.uid;
|
||
if (!fs.existsSync(dir)) {
|
||
fs.mkdirSync(dir);
|
||
}
|
||
|
||
let targetDir = destinationDir + "/" + req.body.uid +'/MYFILES';
|
||
if (!fs.existsSync(targetDir)) {
|
||
fs.mkdirSync(targetDir);
|
||
}
|
||
|
||
req.files.map(( onefile )=>{
|
||
{
|
||
console.log("onefile========================");
|
||
console.log(onefile);
|
||
console.log("onefile========================");
|
||
//===============================================
|
||
let finalTargetFile = targetDir+"/"+onefile.filename;
|
||
console.log("targetDir ==> " + targetDir);
|
||
console.log("finalTargetFile ==> " + finalTargetFile);
|
||
console.log( onefile );
|
||
|
||
fs.rename(onefile.path, finalTargetFile , function (err) {
|
||
if (err) throw err
|
||
console.log('Successfully renamed - '+onefile.path);
|
||
console.log('Start::Database Registration!');
|
||
|
||
var data = {
|
||
"description": req.body.description,
|
||
"file_name": onefile.filename,
|
||
"file_size": onefile.size,
|
||
"file_type": onefile.mimetype,
|
||
"member_id": req.body.member_id,
|
||
"saved_file_name": onefile.filename,
|
||
"title": req.body.title
|
||
};
|
||
|
||
console.log("DATA - > ", data);
|
||
|
||
var queryText = 'INSERT INTO members_myfiles (description,file_name,file_size,file_type,member_id,saved_file_name,title) VALUES ($1,$2,$3,$4,$5,$6,$7) RETURNING uid';
|
||
db.query(queryText, [data.description,data.file_name,data.file_size,data.file_type,data.member_id,data.saved_file_name,data.title], function(dbErr, result) {
|
||
if (dbErr) {
|
||
console.log("DataError - > ", dbErr.toString());
|
||
}else{
|
||
console.log("DB Result - > " , result.rows);
|
||
result_list = result.rows;
|
||
}
|
||
console.log('End::Database Registration!');
|
||
})
|
||
|
||
//return res.status(200).send('Completed')
|
||
})
|
||
//===============================================
|
||
}
|
||
// 2024-05-23 22:13:28 fieldname: 'files',
|
||
// 2024-05-23 22:13:28 originalname: 'ofac sanctions list service - api documentation.docx',
|
||
// 2024-05-23 22:13:28 encoding: '7bit',
|
||
// 2024-05-23 22:13:28 mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||
// 2024-05-23 22:13:28 destination: '/usr/src/app/videos',
|
||
// 2024-05-23 22:13:28 filename: '1716516808509_ofac sanctions list service - api documentation.docx',
|
||
// 2024-05-23 22:13:28 path: '/usr/src/app/videos/1716516808509_ofac sanctions list service - api documentation.docx',
|
||
// 2024-05-23 22:13:28 size: 243667
|
||
// 2024-05-23 22:13:28 }
|
||
})
|
||
|
||
//res.json({ message: "File(s) uploaded successfully" });
|
||
return res.status(200).json({'status': 'Completed', 'internal_return': 0, 'result_list': result_list })
|
||
//
|
||
|
||
});
|
||
|
||
app.post('/upload/resources2', upload.single('file'), (req, res) => {
|
||
console.log(req.body)
|
||
console.log(req.file)
|
||
|
||
let uid = req.body.uid;
|
||
let job_uid = req.body.job_uid;
|
||
console.log(" req.body.uid -> ", uid)
|
||
console.log(" req.body.job_uid -> ", job_uid)
|
||
console.log(" process.env.COMMON_TASKF_PATH-> ", process.env.COMMON_TASKF_PATH)
|
||
|
||
let destinationDir = process.env.COMMON_TASKF_PATH !== undefined ? process.env.COMMON_TASKF_PATH : '/opt/wrenchboard/TEST/TASKFILE';
|
||
|
||
const fs = require('fs');
|
||
const dir = destinationDir + "/" + job_uid;
|
||
if (!fs.existsSync(dir)) {
|
||
fs.mkdirSync(dir);
|
||
}
|
||
|
||
const oldPath = req.file.path;
|
||
const newPath = dir + "/" + req.file.filename;
|
||
var result_list ='';
|
||
fs.rename(oldPath, newPath, function (err) {
|
||
if (err) throw err
|
||
console.log('Successfully renamed - AKA moved!');
|
||
console.log('Start::Database Registration!');
|
||
|
||
|
||
var data = {
|
||
"member_uid": req.body.uid,
|
||
"job_uid": req.body.job_uid,
|
||
"filename": req.file.filename,
|
||
"originalname": req.file.originalname,
|
||
"mimetype": req.file.mimetype,
|
||
"size": req.file.size,
|
||
"encoding": req.file.encoding
|
||
};
|
||
|
||
console.log("DATA - > ", data);
|
||
|
||
var queryText = 'INSERT INTO members_jobs_files( member_uid,job_uid,filename,originalname,mimetype,size,encoding ) VALUES($1,$2,$3,$4,$5,$6,$7) RETURNING uid';
|
||
db.query(queryText, [data.member_uid,data.job_uid,data.filename,data.originalname,data.mimetype,data.size,data.encoding], function(dbErr, result) {
|
||
if (dbErr) {
|
||
console.log("DataError - > ", dbErr.toString());
|
||
}else{
|
||
console.log("DB Result - > " , result.rows);
|
||
result_list = result.rows;
|
||
}
|
||
console.log('End::Database Registration!');
|
||
})
|
||
return res.status(200).json({'status': 'Completed', 'internal_return': 0, 'result_list': result_list })
|
||
//return res.status(200).send('Completed')
|
||
})
|
||
})
|
||
|
||
|
||
app.get('/videos/:filename', (req, res)=>{
|
||
const fileName = req.params.filename;
|
||
let findFilename = 'What Is Single Sign-on (SSO)? How It Works-(1080p25).mp4';
|
||
// var findFilename = '';
|
||
//c35c32bc-9ce4-4ca5-9afc-1ecddfd649f5
|
||
let Qstring = "SELECT * FROM common_media WHERE uid ='"+fileName+"'";
|
||
console.log("Qstring -> ", Qstring);
|
||
db.query(Qstring, function (err, result) {
|
||
try {
|
||
console.log("BEFORE ERR CHECK -> " , result);
|
||
if (err){
|
||
console.log("IN ERR CHECK -> " , err);
|
||
throw err;
|
||
}
|
||
// let resultItem = {
|
||
// "result": result.rows,
|
||
// "total_record": result.rowCount
|
||
// }
|
||
console.log("THIS IS RESULT --> ",result.rows[0].filename);
|
||
console.log("THIS IS RESULT COUNT --> ",result.rowCount);
|
||
if ( result.rowCount === 1){
|
||
findFilename = result.rows[0].filename;
|
||
}
|
||
|
||
|
||
//const filePath = videoFileMap[fileName]
|
||
const completeFile = process.env.COMMON_MEDIA_PATH + findFilename;
|
||
if(!completeFile){
|
||
console.log("Finding File Not Found ", completeFile);
|
||
return res.status(404).send('File not found')
|
||
}
|
||
|
||
console.log("Finding File Found ", completeFile);
|
||
|
||
const stat = fs.statSync(completeFile);
|
||
const fileSize = stat.size;
|
||
const range = req.headers.range;
|
||
|
||
if(range){
|
||
const parts = range.replace(/bytes=/, '').split('-')
|
||
const start = parseInt(parts[0], 10);
|
||
const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1;
|
||
|
||
const chunksize = end - start + 1;
|
||
const file = fs.createReadStream(completeFile, {start, end});
|
||
const head = {
|
||
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
|
||
'Accept-Ranges': 'bytes',
|
||
'Content-Length': chunksize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(206, head);
|
||
file.pipe(res);
|
||
}
|
||
else{
|
||
const head = {
|
||
'Content-Length': fileSize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(200, head);
|
||
fs.createReadStream(completeFile).pipe(res)
|
||
}
|
||
} catch (e) {
|
||
console.log("ERR->",e.message);
|
||
}
|
||
});
|
||
|
||
})
|
||
|
||
//let myfilesCommonPath = process.env.COMMON_MYFILE_PATH;
|
||
app.get('/myfile/:filename', (req, res)=>{
|
||
const fileName = req.params.filename;
|
||
let findFilename = 'What Is Single Sign-on (SSO)? How It Works-(1080p25).mp4';
|
||
let memberUID = '';
|
||
let myfilesCommonPath = process.env.COMMON_MYFILE_PATH;
|
||
console.log("myfilesCommonPath ==> " + myfilesCommonPath);
|
||
// var findFilename = '';
|
||
//c35c32bc-9ce4-4ca5-9afc-1ecddfd649f5
|
||
let Qstring = "SELECT mf.*, m.uid AS member_uid FROM members_myfiles mf LEFT JOIN members m ON m.id=mf.member_id WHERE mf.uid='"+fileName+"'";
|
||
console.log("Qstring -> ", Qstring);
|
||
db.query(Qstring, function (err, result) {
|
||
try {
|
||
console.log("BEFORE ERR CHECK -> " , result);
|
||
if (err){
|
||
console.log("IN ERR CHECK -> " , err);
|
||
throw err;
|
||
}
|
||
// let resultItem = {
|
||
// "result": result.rows,
|
||
// "total_record": result.rowCount
|
||
// }
|
||
console.log("THIS IS RESULT --> ",result.rows[0].file_name);
|
||
console.log("THIS IS RESULT COUNT --> ",result.rowCount);
|
||
if ( result.rowCount === 1){
|
||
findFilename = result.rows[0].file_name;
|
||
memberUID = result.rows[0].member_uid;
|
||
}
|
||
myfilesCommonPath ="/opt/wrenchboard/TEST/PROFILE";
|
||
// $selectedFile = $this->savePath.'PROFILE/'.$out["member_uid"]."/MYFILES/". $out["saved_file_name"];
|
||
const completeFile = myfilesCommonPath+"/"+memberUID+"/MYFILES/" + findFilename;
|
||
if(!completeFile){
|
||
console.log("Finding File Not Found ", completeFile);
|
||
return res.status(404).send('File not found')
|
||
}
|
||
|
||
console.log("Finding File Found ", completeFile);
|
||
|
||
const stat = fs.statSync(completeFile);
|
||
const fileSize = stat.size;
|
||
const range = req.headers.range;
|
||
|
||
if(range){
|
||
const parts = range.replace(/bytes=/, '').split('-')
|
||
const start = parseInt(parts[0], 10);
|
||
const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1;
|
||
|
||
const chunksize = end - start + 1;
|
||
const file = fs.createReadStream(completeFile, {start, end});
|
||
const head = {
|
||
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
|
||
'Accept-Ranges': 'bytes',
|
||
'Content-Length': chunksize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(206, head);
|
||
file.pipe(res);
|
||
}
|
||
else{
|
||
const head = {
|
||
'Content-Length': fileSize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(200, head);
|
||
fs.createReadStream(completeFile).pipe(res)
|
||
}
|
||
} catch (e) {
|
||
console.log("ERR->",e.message);
|
||
}
|
||
});
|
||
|
||
|
||
|
||
})
|
||
|
||
app.get('/mytask/:filename', (req, res)=>{
|
||
const fileName = req.params.filename;
|
||
let findFilename = 'What Is Single Sign-on (SSO)? How It Works-(1080p25).mp4';
|
||
let memberUID = '';
|
||
let myfilesCommonPath = process.env.COMMON_MYFILE_PATH;
|
||
console.log("myfilesCommonPath ==> " + myfilesCommonPath);
|
||
// var findFilename = '';
|
||
//c35c32bc-9ce4-4ca5-9afc-1ecddfd649f5
|
||
let Qstring = "SELECT mf.*, m.uid AS member_uid FROM members_jobs_files mf LEFT JOIN members m ON m.uid::text=mf.member_uid::text WHERE mf.uid='"+fileName+"'";
|
||
console.log("Qstring -> ", Qstring);
|
||
db.query(Qstring, function (err, result) {
|
||
try {
|
||
console.log("BEFORE ERR CHECK -> " , result);
|
||
if (err){
|
||
console.log("IN ERR CHECK -> " , err);
|
||
throw err;
|
||
}
|
||
|
||
/*
|
||
var queryText = 'INSERT INTO members_jobs_files( member_uid,job_uid,filename,originalname,mimetype,size,encoding ) VALUES($1,$2,$3,$4,$5,$6,$7) RETURNING uid';
|
||
db.query(queryText, [data.member_uid,data.job_uid,data.filename,data.originalname,data.mimetype,data.size,data.encoding], function(dbErr, result) {
|
||
/opt/wrenchboard/TEST/TASKFILE/9d6e00c0-2de8-4099-a617-0c2811d8a738
|
||
*/
|
||
|
||
console.log("THIS IS RESULT --> ",result.rows[0].file_name);
|
||
console.log("THIS IS RESULT COUNT --> ",result.rowCount);
|
||
if ( result.rowCount === 1){
|
||
findFilename = result.rows[0].filename;
|
||
jobUID = result.rows[0].job_uid;
|
||
}
|
||
let destinationDir = process.env.COMMON_TASKF_PATH !== undefined ? process.env.COMMON_TASKF_PATH : '/opt/wrenchboard/TEST/TASKFILE';
|
||
|
||
// $selectedFile = $this->savePath.'PROFILE/'.$out["member_uid"]."/MYFILES/". $out["saved_file_name"];
|
||
const completeFile = destinationDir+"/"+jobUID+"/" + findFilename;
|
||
if(!completeFile){
|
||
console.log("Finding File Not Found ", completeFile);
|
||
return res.status(404).send('File not found')
|
||
}
|
||
|
||
console.log("Finding File Found ", completeFile);
|
||
|
||
const stat = fs.statSync(completeFile);
|
||
const fileSize = stat.size;
|
||
const range = req.headers.range;
|
||
|
||
if(range){
|
||
const parts = range.replace(/bytes=/, '').split('-')
|
||
const start = parseInt(parts[0], 10);
|
||
const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1;
|
||
|
||
const chunksize = end - start + 1;
|
||
const file = fs.createReadStream(completeFile, {start, end});
|
||
const head = {
|
||
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
|
||
'Accept-Ranges': 'bytes',
|
||
'Content-Length': chunksize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(206, head);
|
||
file.pipe(res);
|
||
}
|
||
else{
|
||
const head = {
|
||
'Content-Length': fileSize,
|
||
'Content-Type': 'video/mp4'
|
||
};
|
||
res.writeHead(200, head);
|
||
fs.createReadStream(completeFile).pipe(res)
|
||
}
|
||
} catch (e) {
|
||
console.log("ERR->",e.message);
|
||
}
|
||
});
|
||
|
||
|
||
|
||
})
|
||
|
||
app.listen(3036, ()=>{
|
||
console.log('server is listening on post 3036')
|
||
}) |