index.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 { computeFileMD5 } from '#utils';
  7. const router = express.Router();
  8. import dayjs from 'dayjs'
  9. router.use(function timeLog(req, res, next) {
  10. console.log("Time: ", Date.now());
  11. next();
  12. });
  13. router.get("/:fileId", async function (req, res) {
  14. const fileId = req.params.fileId; // 获取 fileId 参数
  15. const fileRow = await getFileBymd5(fileId)
  16. if(!fileRow) {
  17. return res.status(404).send("文件查询失败");
  18. }
  19. const uploadPath = './base_files/' + fileId;
  20. const filePath = path.resolve(uploadPath);
  21. // 检查文件是否存在
  22. if (!fs.existsSync(filePath)) {
  23. return res.status(404).send("服务器中不存在该文件");
  24. }
  25. // 返回文件
  26. res.setHeader("Content-Type", fileRow.mimetype);
  27. res.sendFile(filePath);
  28. });
  29. // 上传附件
  30. router.put("/", async function (req, res) {
  31. let sampleFile;
  32. let uploadPath;
  33. if (!req.files || Object.keys(req.files).length === 0) {
  34. return res.status(400).send('No files were uploaded.');
  35. }
  36. sampleFile = req.files.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: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  52. update_time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  53. }
  54. uploadPath = './base_files/' + sampleFile.md5;
  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;