app.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. const Koa = require('koa');
  2. const path = require('path');
  3. const router = require('koa-router')();
  4. const koaBody = require('koa-body');
  5. const static = require('koa-static');
  6. const cors = require('koa2-cors');
  7. const fs = require('fs-extra');
  8. const app = new Koa();
  9. const uploadUrl = 'http://localhost:3001/static/upload';
  10. fs.ensureDir(path.join(__dirname, 'static/upload'));
  11. app.use(cors());
  12. app.use(
  13. koaBody({
  14. multipart: true,
  15. formidable: {
  16. maxFieldsSize: 20 * 1024 * 1024,
  17. multipart: true,
  18. },
  19. })
  20. );
  21. router.get('/', (ctx) => {
  22. ctx.type = 'html';
  23. const pathUrl = path.join(__dirname, '/static/upload.html');
  24. ctx.body = fs.createReadStream(pathUrl);
  25. });
  26. const uploadFilePublic = function (ctx, files, flag) {
  27. const filePath = path.join(__dirname, '/static/upload/');
  28. let fileReader, fileResource, writeStream;
  29. const fileFunc = function (file) {
  30. fileReader = fs.createReadStream(file.path);
  31. fileResource = filePath + `/${file.name}`;
  32. writeStream = fs.createWriteStream(fileResource);
  33. fileReader.pipe(writeStream);
  34. };
  35. const returnFunc = function (flag) {
  36. console.log(flag);
  37. console.log(files);
  38. if (flag) {
  39. let url = '';
  40. for (let i = 0; i < files.length; i++) {
  41. url += uploadUrl + `/${files[i].name},`;
  42. }
  43. url = url.replace(/,$/gi, '');
  44. ctx.body = {
  45. url: url,
  46. code: 0,
  47. message: 'upload Success!',
  48. };
  49. } else {
  50. ctx.body = {
  51. url: uploadUrl + `/${files.name}`,
  52. code: 0,
  53. message: 'upload Success!',
  54. };
  55. }
  56. };
  57. if (flag) {
  58. for (let i = 0; i < files.length; i++) {
  59. const f1 = files[i];
  60. fileFunc(f1);
  61. }
  62. } else {
  63. fileFunc(files);
  64. }
  65. if (!fs.existsSync(filePath)) {
  66. fs.mkdir(filePath, (err) => {
  67. if (err) {
  68. throw new Error(err);
  69. } else {
  70. returnFunc(flag);
  71. }
  72. });
  73. } else {
  74. returnFunc(flag);
  75. }
  76. };
  77. router.post('/upload', (ctx) => {
  78. let files = ctx.request.files.file;
  79. if (files.length === undefined) {
  80. uploadFilePublic(ctx, files, false);
  81. } else {
  82. uploadFilePublic(ctx, files, true);
  83. }
  84. });
  85. app.use(static(path.join(__dirname)));
  86. app.use(router.routes()).use(router.allowedMethods());
  87. app.listen(3001, () => {
  88. console.log('server is listen in 3001');
  89. });