94 lines
3.6 KiB
JavaScript
94 lines
3.6 KiB
JavaScript
// uploadRoute.js
|
|
const express = require("express");
|
|
const upload = require("../middlewares/upload"); // Import the Multer middleware
|
|
const pool = require("../config/db");
|
|
const path = require("path");
|
|
const fs = require("fs-extra");
|
|
const ffmpeg = require("fluent-ffmpeg");
|
|
|
|
const router = express.Router();
|
|
|
|
// Ensure the uploads and optimized directories exist
|
|
const uploadDir = path.join(__dirname, "../uploads");
|
|
const optimizedDir = path.join(__dirname, "../optimized");
|
|
fs.ensureDirSync(uploadDir);
|
|
fs.ensureDirSync(optimizedDir);
|
|
|
|
async function optimizeVideo(inputPath, outputPath) {
|
|
return new Promise((resolve, reject) => {
|
|
ffmpeg(inputPath)
|
|
.videoCodec("libx264")
|
|
.audioCodec("aac")
|
|
.format("mp4")
|
|
.outputOptions([
|
|
"-movflags frag_keyframe+empty_moov",
|
|
"-preset medium",
|
|
"-crf 23",
|
|
"-maxrate 2M",
|
|
"-bufsize 4M",
|
|
])
|
|
.on("end", () => {
|
|
console.log("Video optimization completed.");
|
|
resolve();
|
|
})
|
|
.on("error", (err) => {
|
|
console.error("Error optimizing video:", err);
|
|
reject(err);
|
|
})
|
|
.save(outputPath);
|
|
});
|
|
}
|
|
|
|
// Upload file API
|
|
router.post("/upload", upload.single("file"), async (req, res) => {
|
|
try {
|
|
const { client_id, file_name } = req.body;
|
|
if (!req.file) {
|
|
return res.status(400).json({ error: "No file uploaded" });
|
|
}
|
|
|
|
const inputPath = path.join(uploadDir, req.file.filename);
|
|
const outputPath = path.join(optimizedDir, "optimized_" + req.file.filename);
|
|
const dbFilePath = `optimized/optimized_${req.file.filename}`;
|
|
|
|
if (req.file.mimetype.startsWith("video/")) {
|
|
try {
|
|
await optimizeVideo(inputPath, outputPath);
|
|
await pool.query(
|
|
"INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)",
|
|
[client_id, file_name, dbFilePath]
|
|
);
|
|
res.json({ message: "File uploaded and optimized successfully!", file_path: dbFilePath });
|
|
} catch (optimizeError) {
|
|
console.error("Optimization error:", optimizeError);
|
|
await pool.query(
|
|
"INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)",
|
|
[client_id, file_name, `uploads/${req.file.filename}`]
|
|
);
|
|
res.status(500).json({ message: "File uploaded, but optimization failed.", file_path: `uploads/${req.file.filename}` });
|
|
}
|
|
} else {
|
|
await pool.query(
|
|
"INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)",
|
|
[client_id, file_name, `uploads/${req.file.filename}`]
|
|
);
|
|
res.json({ message: "File uploaded successfully!", file_path: `uploads/${req.file.filename}` });
|
|
}
|
|
} catch (err) {
|
|
console.error("General upload error:", err);
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
router.delete("/del/:fileid", async (req, res) => {
|
|
try {
|
|
const { fileid } = req.params;
|
|
const [files] = await pool.query("delete from tbl_files where transid =? ", [fileid]);
|
|
const [filesfromads] = await pool.query("delete from tbl_client_partner_mapping where fileid =? ", [fileid]);
|
|
res.json(files);
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
module.exports = router; |