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("./temp/", `${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