2025-06-23 18:24:37 -05:00

36 lines
1.3 KiB
JavaScript

import Express from "express";
import busboy from "connect-busboy";
import path from "path";
import fs from "fs";
//#region src/index.ts
const app = Express();
app.use(busboy());
app.use(Express.json());
app.post("/uploadVideo", async (req, res) => {
try {
console.log("Starting upload");
const videoId = req.query.videoId;
req.busboy.on("file", (fieldname, uploadingFile, fileInfo) => {
console.log(`Saving ${fileInfo.filename} as ${videoId}`);
const videoExt = fileInfo.filename.split(".").at(-1);
var targetPath = path.join("/opt/prod/storage/uploadsPart1", `${videoId}.${videoExt}`);
const fileStream = fs.createWriteStream(targetPath);
uploadingFile.pipe(fileStream);
fileStream.on("close", () => {
console.log(`Completed upload ${fileInfo.filename}`);
const ffmpegCommand = `ffmpeg -i "${targetPath}" -c:v libx264 -crf 23 -preset medium -movflags +faststart -c:a aac -b:a 128k /opt/prod/storage/uploadsPart2/${videoId}-formatted.mp4`;
const wstream = fs.createWriteStream("/opt/prod/pipe/ffmpeg");
wstream.write(`${ffmpegCommand}\n`);
wstream.write(`rm -f "${targetPath}"\n`);
res.send({ statusMessage: "Upload part 1 complete" });
});
});
req.pipe(req.busboy);
} catch (err) {
res.status(500).send(err);
}
});
app.listen(3001);
//#endregion