// 附件 import express from "express"; import path from "path"; import fs from "node:fs"; import { files_insert, ishaveFileBymd5, getFileBymd5 } from "#db"; import { shanghaiTime, dirExists } from "#utils"; const router = express.Router(); router.use(function timeLog(req, res, next) { console.log("Time: ", Date.now()); next(); }); router.get("/:fileId", async function (req, res) { const fileId = req.params.fileId; // 获取 fileId 参数 const fileRow = await getFileBymd5(fileId); if (!fileRow) { return res.status(404).send("文件查询失败"); } const uploadPath = "./base_files/" + fileId; const filePath = path.resolve(uploadPath); // 检查文件是否存在 if (!fs.existsSync(filePath)) { return res.status(404).send("服务器中不存在该文件"); } // 返回文件 res.setHeader("Content-Type", fileRow.mimetype); res.sendFile(filePath); }); // 上传附件 router.put("/", async function (req, res) { let sampleFile; let uploadPath; if (!req.files || Object.keys(req.files).length === 0) { return res.status(400).send("No files were uploaded."); } sampleFile = req.files.sampleFile; // const fileMd5 = await computeFileMD5(sampleFile); const fileMd5 = sampleFile.md5; // 如果存在重复的数据, 终止后续的操作 if (await ishaveFileBymd5(fileMd5)) { res.send({ file_id: fileMd5, }); return; } const fileInfo = { name: sampleFile.name, mimetype: sampleFile.mimetype, size: sampleFile.size, md5: sampleFile.md5, create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"), update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"), }; uploadPath = "./base_files/" + sampleFile.md5; dirExists("./base_files/"); // 、移动上传文件至指定目录 sampleFile.mv(uploadPath, async function (err) { if (err) { return res.status(500).send(err); } const isAdd = await files_insert(fileInfo); if (!isAdd) { res.status(500).send({ msg: "添加失败", }); return; } res.send({ file_id: fileMd5, }); }); }); // define the about route router.get("/about", function (req, res) { res.send("About files"); }); export default router;