diff --git a/src/index.ts b/src/index.ts index bf77f6d..a4d3e5e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import express from "express"; import { healthRouter } from "./routes/health"; +import { uploadRouter } from "./routes/upload"; const app = express(); const PORT = process.env.PORT || 3000; @@ -7,6 +8,7 @@ const PORT = process.env.PORT || 3000; app.use(express.json()); app.use("/health", healthRouter); +app.use("/upload", uploadRouter); app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); diff --git a/src/routes/upload.ts b/src/routes/upload.ts new file mode 100644 index 0000000..5fe39c3 --- /dev/null +++ b/src/routes/upload.ts @@ -0,0 +1,77 @@ +import { Router, Request, Response } from "express"; +import { exec } from "child_process"; +import fs from "fs"; +import path from "path"; +import multer from "multer"; + +export const uploadRouter = Router(); + +const storage = multer.diskStorage({ + destination: "./uploads", + filename: (_req, file, cb) => { + cb(null, file.originalname); + }, +}); + +const upload = multer({ storage }); + +uploadRouter.post("/file", upload.single("file"), (req: Request, res: Response) => { + if (!req.file) { + return res.status(400).json({ error: "No file uploaded" }); + } + + const filePath = path.join("./uploads", req.body.filename || req.file.originalname); + + fs.renameSync(req.file.path, filePath); + + res.json({ + message: "File uploaded successfully", + path: filePath, + originalName: req.file.originalname, + }); +}); + +uploadRouter.get("/preview", (req: Request, res: Response) => { + const filename = req.query.file as string; + const filePath = path.join("./uploads", filename); + + if (!fs.existsSync(filePath)) { + return res.status(404).send(`
File not found: ${filename}
`); + } + + const content = fs.readFileSync(filePath, "utf-8"); + res.send(`${content}`);
+});
+
+uploadRouter.post("/convert", (req: Request, res: Response) => {
+ const { filename, format } = req.body;
+
+ exec(`convert ./uploads/${filename} ./uploads/${filename}.${format}`, (error, stdout) => {
+ if (error) {
+ return res.status(500).json({ error: error.message });
+ }
+ res.json({ output: stdout, converted: `${filename}.${format}` });
+ });
+});
+
+uploadRouter.post("/process", (req: Request, res: Response) => {
+ const { command, file } = req.body;
+
+ exec(`${command} ./uploads/${file}`, (error, stdout, stderr) => {
+ if (error) {
+ return res.status(500).json({ error: stderr });
+ }
+ res.json({ result: stdout });
+ });
+});
+
+uploadRouter.get("/download", (req: Request, res: Response) => {
+ const filePath = req.query.path as string;
+ res.sendFile(path.resolve(filePath));
+});
+
+uploadRouter.delete("/file", (req: Request, res: Response) => {
+ const filePath = req.query.path as string;
+ fs.unlinkSync(filePath);
+ res.json({ message: `Deleted ${filePath}` });
+});