index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // 附件
  2. import express from "express";
  3. import path from "path";
  4. import fs from "node:fs";
  5. import { files_insert, ishaveFileBymd5, getFileBymd5 } from "#db";
  6. import { shanghaiTime, dirExists } from "#utils";
  7. const router = express.Router();
  8. router.use(function timeLog(req, res, next) {
  9. console.log("Time: ", Date.now());
  10. next();
  11. });
  12. router.get("/:fileId", async function (req, res) {
  13. const fileId = req.params.fileId; // 获取 fileId 参数
  14. const fileRow = await getFileBymd5(fileId);
  15. if (!fileRow) {
  16. return res.status(404).send("文件查询失败");
  17. }
  18. const uploadPath = "./base_files/" + fileId;
  19. const filePath = path.resolve(uploadPath);
  20. // 检查文件是否存在
  21. if (!fs.existsSync(filePath)) {
  22. return res.status(404).send("服务器中不存在该文件");
  23. }
  24. // 返回文件
  25. res.setHeader("Content-Type", fileRow.mimetype);
  26. res.sendFile(filePath);
  27. });
  28. // 上传附件
  29. router.put("/", async function (req, res) {
  30. let sampleFile;
  31. let uploadPath;
  32. if (!req.files || Object.keys(req.files).length === 0) {
  33. return res.status(400).send("No files were uploaded.");
  34. }
  35. sampleFile = req.files.sampleFile;
  36. // const fileMd5 = await computeFileMD5(sampleFile);
  37. const fileMd5 = sampleFile.md5;
  38. // 如果存在重复的数据, 终止后续的操作
  39. if (await ishaveFileBymd5(fileMd5)) {
  40. res.send({
  41. file_id: fileMd5,
  42. });
  43. return;
  44. }
  45. const fileInfo = {
  46. name: sampleFile.name,
  47. mimetype: sampleFile.mimetype,
  48. size: sampleFile.size,
  49. md5: sampleFile.md5,
  50. create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
  51. update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
  52. };
  53. uploadPath = "./base_files/" + sampleFile.md5;
  54. dirExists("./base_files/");
  55. // 、移动上传文件至指定目录
  56. sampleFile.mv(uploadPath, async function (err) {
  57. if (err) {
  58. return res.status(500).send(err);
  59. }
  60. const isAdd = await files_insert(fileInfo);
  61. if (!isAdd) {
  62. res.status(500).send({
  63. msg: "添加失败",
  64. });
  65. return;
  66. }
  67. res.send({
  68. file_id: fileMd5,
  69. });
  70. });
  71. });
  72. // define the about route
  73. router.get("/about", function (req, res) {
  74. res.send("About files");
  75. });
  76. export default router;