index.mjs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import Router from '@koa/router';
  2. import { koaBody } from 'koa-body';
  3. import { copyFile, rm, access, mkdir } from 'node:fs/promises';
  4. import { UPLOAD_DIR, STATIC } from '../app.config.mjs';
  5. const router = new Router();
  6. // 通过router实例的一些方法 比如 get、post等去定义 对应请求方法的路由
  7. router
  8. .get('/', async (ctx) => {
  9. let res = await ctx.execute('select * from users;');
  10. ctx.body =
  11. res === false
  12. ? {
  13. code: 1,
  14. msg: '失败',
  15. }
  16. : {
  17. code: 0,
  18. msg: '成功',
  19. data: res,
  20. };
  21. })
  22. .put(
  23. '/upload',
  24. koaBody({
  25. multipart: true,
  26. formidable: {
  27. keepExtensions: true,
  28. uploadDir: UPLOAD_DIR, // 设置上传文件的最终位置
  29. },
  30. onError(err, ctx) {
  31. ctx.body = {
  32. code: 1,
  33. msg: err,
  34. };
  35. },
  36. }),
  37. async (ctx) => {
  38. let filename = ctx.request.files.file.newFilename;
  39. let srcFile = `./${UPLOAD_DIR}/${filename}`;
  40. let destFile = srcFile;
  41. // 获取 请求体 中 除了file文件之外的其他数据
  42. const { folder } = ctx.request.body;
  43. // 如果用户在上传文件时 指定了目标文件夹
  44. if (folder) {
  45. // 1 将默认上传位置的文件 拷贝到 目标的文件夹下
  46. destFile = `./${UPLOAD_DIR}/${folder}/${filename}`;
  47. try {
  48. // 先确保destFile的文件夹都真实存在
  49. let isExist = await access(`./${UPLOAD_DIR}/${folder}`).catch(
  50. () => false
  51. );
  52. // isExist 就是 undefined 或者 false
  53. if (isExist == false) {
  54. // 如果不存在 就创建
  55. await mkdir(`./${UPLOAD_DIR}/${folder}`, { recursive: true });
  56. }
  57. await copyFile(srcFile, destFile);
  58. // 2 成功后 删除默认位置的文件
  59. await rm(srcFile);
  60. } catch (error) {
  61. console.error(error);
  62. }
  63. }
  64. // 给客户端响应数据
  65. ctx.body = {
  66. code: 0,
  67. data: {
  68. path: `${UPLOAD_DIR.replace(STATIC, '')}/${folder}/${filename}`,
  69. filename,
  70. },
  71. msg: '上传成功',
  72. };
  73. }
  74. );
  75. export default router;