Files
WrenchBoardMediaMicro/index.js
T
CHIEFSOFT\ameye c29b436f16 db insert
2024-04-13 20:14:34 -04:00

187 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const express = require('express')
const fs = require('fs')
const db = require('./app/db')
const app = express()
const cors = require("cors");
const multer = require('multer')
// 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)
const storage = multer.diskStorage({
destination: function(req, file, cb) {
return cb(null, '/opt/wrenchboard/TEST/DUMMY')
},
filename: function (req, file, cb) {
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;
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( request ) VALUES($1) RETURNING id';
db.query(queryText, [data], function(dbErr, result) {
if (dbErr) {
console.log("DataError - > ", dbErr.toString());
}else{
console.log("DB Result - > " , result);
}
console.log('End::Database Registration!');
})
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);
}
});
})
app.listen(3036, ()=>{
console.log('server is listening on post 3036')
})