109 lines
3.9 KiB
JavaScript
109 lines
3.9 KiB
JavaScript
const express = require('express')
|
||
const fs = require('fs')
|
||
const db = require('./app/db')
|
||
const app = express()
|
||
const cors = require("cors");
|
||
|
||
|
||
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',
|
||
}
|
||
|
||
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));
|
||
// ,cors(corsOptions)
|
||
|
||
app.get('/videos/:filename', (req, res)=>{
|
||
const fileName = req.params.filename;
|
||
|
||
//c35c32bc-9ce4-4ca5-9afc-1ecddfd649f5
|
||
let Qstring = "SELECT * FROM common_media WHERE uid ='"+fileName+"'";
|
||
db.query(Qstring, function (err, result) {
|
||
try {
|
||
if (err) throw err;
|
||
let resultItem = {
|
||
"result": result.rows,
|
||
"total_record": result.rowCount
|
||
}
|
||
console.log(result);
|
||
} catch (e) {
|
||
}
|
||
});
|
||
|
||
|
||
const filePath = videoFileMap[fileName]
|
||
const completeFile = process.env.COMMON_MEDIA_PATH + filePath;
|
||
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)
|
||
}
|
||
})
|
||
|
||
app.listen(3036, ()=>{
|
||
console.log('server is listening on post 3036')
|
||
}) |