index.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. console.log(45, sampleFile);
  37. // const fileMd5 = await computeFileMD5(sampleFile);
  38. const fileMd5 = sampleFile.md5;
  39. // 如果存在重复的数据, 终止后续的操作
  40. if (await ishaveFileBymd5(fileMd5)) {
  41. res.send({
  42. file_id: fileMd5,
  43. });
  44. return;
  45. }
  46. const fileInfo = {
  47. name: sampleFile.name,
  48. mimetype: sampleFile.mimetype,
  49. size: sampleFile.size,
  50. md5: sampleFile.md5,
  51. create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
  52. update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
  53. };
  54. uploadPath = "./base_files/" + sampleFile.md5;
  55. dirExists("./base_files/")
  56. // 、移动上传文件至指定目录
  57. sampleFile.mv(uploadPath, async function (err) {
  58. if (err) {
  59. return res.status(500).send(err);
  60. }
  61. const isAdd = await files_insert(fileInfo);
  62. if (!isAdd) {
  63. res.status(500).send({
  64. msg: "添加失败",
  65. });
  66. return;
  67. }
  68. res.send({
  69. file_id: fileMd5,
  70. });
  71. });
  72. });
  73. // define the about route
  74. router.get("/about", function (req, res) {
  75. res.send("About files");
  76. });
  77. export default router;