// 添加账本 import { getFileBymd5, searchFileByPath } from "#db"; import logger from "#logger"; import path from "node:path"; import fs from "node:fs"; import express from "express"; import { EPub } from "epub2"; import { dirExists, isFileSync, isDir, waittime } from "#utils"; import { saveImgs, calculateMD5 } from "./image.js"; import { htmlParser } from "./txt.js"; import { saveAllCSS } from "./style.js"; const router = express.Router(); // middleware that is specific to this router router.use(function timeLog(req, res, next) { next(); }); // define the home page route router.get("/", async function (req, res) { res.send("epub types"); }); // define the about route router.get("/about", function (req, res) { res.send("About types"); }); router.get("/html", function (req, res) { // // res.sendFile('base_files/2a0b8153f3ede4bd43abb3b0e38ee857/epub-extract/OEBPS/Text/:::::::::::::::::::::*:*::**::*:.html') // res.send("About types"); // 构建文件的绝对路径 const filePath = path.join( process.cwd(), // "./base_files/2a0b8153f3ede4bd43abb3b0e38ee857/epub-extract/OEBPS/Text/:::::::::::::::::::::*:*::**::*:.html" "./base_files/5ae2d9158081faab184484ed1783e176/epub-extract/OEBPS/text00040.html" ); // 发送文件 res.sendFile(filePath, function (err) { if (err) { console.error("Error sending file:", err); res.status(500).send("File not found or other error occurred."); } }); }); router.get("/img/:fileId", async function (req, res) { const fileId = req.params.fileId; // 获取 fileId 参数 logger.info(`Found ${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.get("/css/:fileId", async function (req, res) { const fileId = req.params.fileId; // 获取 fileId 参数 logger.info(`Found ${fileId}`); const fileRow = await getFileBymd5(fileId); if (!fileRow) { return res.status(404).send("文件查询失败"); } const filePath = path.resolve(fileRow.path); console.log(79, filePath) // 检查文件是否存在 if (!fs.existsSync(filePath)) { return res.status(404).send("服务器中不存在该文件"); } // 返回文件 res.setHeader("Content-Type", fileRow.mimetype); res.sendFile(filePath); }); // define the about route router.put("/", async function (req, res) { let sampleFile; let uploadPath; let epubData; let zipEpubExtract; let epubFilePath; let epub; if (!req.files || Object.keys(req.files).length === 0) { return res.status(400).send("No files were uploaded."); } sampleFile = req.files.file; let file_md5 = sampleFile.md5; uploadPath = `./base_files/${file_md5}/`; epubFilePath = uploadPath + sampleFile.md5 + '.epub'; zipEpubExtract = uploadPath + "epub-extract/"; dirExists(uploadPath); await waittime(200); const isFile = isFileSync(epubFilePath); // 移动上传文件至指定目录 if (!isFile) { sampleFile.mv(epubFilePath, function (err) { console.log("移动上传文件至指定目录的反馈", err); }); epubData = sampleFile.data; } else { epubData = fs.readFileSync(epubFilePath); file_md5 = await calculateMD5(epubFilePath) } /* 是否需要解压文件 */ if (!(await isDir(zipEpubExtract))) { epub = await EPub.createAsync(epubData, null, ""); dirExists(zipEpubExtract); epub.zip.admZip.extractAllTo(zipEpubExtract); } else { epub = await EPub.createAsync(epubData, null, ""); } // console.log(epub); // Object.keys(epub.metadata).forEach((objKey) => { // console.log(464646, objKey, epub.metadata[objKey]); // }); // let imgs = epub.listImage(); // await epub.getImageAsync(imgs[0].id).then( function([data, mimeType]){ // console.log(`\ngetImage: cover\n`); // console.log(data); // console.log(mimeType) // }); res.send("About types"); /* 1、读取图片信息 2、替换文件中的图片内容 3、存储html数据 4、存储css数据 */ await saveImgs(epub, uploadPath); await saveAllCSS(epub, uploadPath) // 存储html数据 const test = await htmlParser(epub, zipEpubExtract, file_md5); // console.log("\nSPINE:\n"); // // console.log(epub.flow); // epub.flow.forEach((elm) => { // if (elm.href.indexOf("html") < 0) { // console.log(88, elm); // } // }); // console.log("\nTOC:\n"); // console.log(epub.toc); // epub.toc.forEach((elm) => { // if (elm.href.indexOf("html") < 0) { // console.log(88, elm); // } // }); }); export default router;