feat: 添加文件上传接口

This commit is contained in:
xiaoxian521 2022-11-13 19:24:59 +08:00
parent 960ee31659
commit c528be50b7
7 changed files with 201 additions and 76 deletions

2
.gitignore vendored
View File

@ -82,3 +82,5 @@ dist
docs docs
.DS_Store .DS_Store
upload_tmp
public/images/

View File

@ -8,11 +8,12 @@
"author": "xiaoxian521", "author": "xiaoxian521",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@pureadmin/utils": "^1.4.0",
"@types/body-parser": "^1.19.2", "@types/body-parser": "^1.19.2",
"@types/express": "^4.17.14", "@types/express": "^4.17.14",
"@types/express-ws": "^3.0.1", "@types/express-ws": "^3.0.1",
"@types/formidable": "^2.0.5",
"@types/jsonwebtoken": "^8.5.9", "@types/jsonwebtoken": "^8.5.9",
"@types/multer": "^1.4.7",
"@types/node": "^18.11.9", "@types/node": "^18.11.9",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
"body-parser": "^1.20.1", "body-parser": "^1.20.1",
@ -22,8 +23,8 @@
"express": "^4.18.2", "express": "^4.18.2",
"express-swagger-generator": "^1.1.17", "express-swagger-generator": "^1.1.17",
"express-ws": "^5.0.2", "express-ws": "^5.0.2",
"formidable": "^2.0.1",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"multer": "1.4.5-lts.1",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",
"nodemon": "^2.0.20", "nodemon": "^2.0.20",
"open": "^8.4.0", "open": "^8.4.0",

167
pnpm-lock.yaml generated
View File

@ -1,11 +1,12 @@
lockfileVersion: 5.4 lockfileVersion: 5.4
specifiers: specifiers:
'@pureadmin/utils': ^1.4.0
'@types/body-parser': ^1.19.2 '@types/body-parser': ^1.19.2
'@types/express': ^4.17.14 '@types/express': ^4.17.14
'@types/express-ws': ^3.0.1 '@types/express-ws': ^3.0.1
'@types/formidable': ^2.0.5
'@types/jsonwebtoken': ^8.5.9 '@types/jsonwebtoken': ^8.5.9
'@types/multer': ^1.4.7
'@types/node': ^18.11.9 '@types/node': ^18.11.9
'@types/ws': ^8.5.3 '@types/ws': ^8.5.3
body-parser: ^1.20.1 body-parser: ^1.20.1
@ -15,8 +16,8 @@ specifiers:
express: ^4.18.2 express: ^4.18.2
express-swagger-generator: ^1.1.17 express-swagger-generator: ^1.1.17
express-ws: ^5.0.2 express-ws: ^5.0.2
formidable: ^2.0.1
jsonwebtoken: ^8.5.1 jsonwebtoken: ^8.5.1
multer: 1.4.5-lts.1
mysql2: ^2.3.3 mysql2: ^2.3.3
nodemon: ^2.0.20 nodemon: ^2.0.20
open: ^8.4.0 open: ^8.4.0
@ -26,11 +27,12 @@ specifiers:
winston: ^3.8.2 winston: ^3.8.2
devDependencies: devDependencies:
'@pureadmin/utils': 1.4.0_dayjs@1.11.6
'@types/body-parser': 1.19.2 '@types/body-parser': 1.19.2
'@types/express': 4.17.14 '@types/express': 4.17.14
'@types/express-ws': 3.0.1 '@types/express-ws': 3.0.1
'@types/formidable': 2.0.5
'@types/jsonwebtoken': 8.5.9 '@types/jsonwebtoken': 8.5.9
'@types/multer': 1.4.7
'@types/node': 18.11.9 '@types/node': 18.11.9
'@types/ws': 8.5.3 '@types/ws': 8.5.3
body-parser: 1.20.1 body-parser: 1.20.1
@ -40,8 +42,8 @@ devDependencies:
express: 4.18.2 express: 4.18.2
express-swagger-generator: 1.1.17 express-swagger-generator: 1.1.17
express-ws: 5.0.2_express@4.18.2 express-ws: 5.0.2_express@4.18.2
formidable: 2.0.1
jsonwebtoken: 8.5.1 jsonwebtoken: 8.5.1
multer: 1.4.5-lts.1
mysql2: 2.3.3 mysql2: 2.3.3
nodemon: 2.0.20 nodemon: 2.0.20
open: 8.4.0 open: 8.4.0
@ -127,6 +129,23 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/sourcemap-codec': 1.4.14
dev: true dev: true
/@pureadmin/utils/1.4.0_dayjs@1.11.6:
resolution: {integrity: sha512-xuy4/gPXoyUuTxxJGmyriXl8n4QGl9ya9Hh+deZvfhixlKHWyAz+ByJfwTb//B7b9Lpj/3sa53wTMC/oYgXAjQ==}
peerDependencies:
dayjs: '*'
echarts: '*'
vue: '*'
peerDependenciesMeta:
dayjs:
optional: true
echarts:
optional: true
vue:
optional: true
dependencies:
dayjs: 1.11.6
dev: true
/@tsconfig/node10/1.0.9: /@tsconfig/node10/1.0.9:
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
dev: true dev: true
@ -181,12 +200,6 @@ packages:
'@types/serve-static': 1.15.0 '@types/serve-static': 1.15.0
dev: true dev: true
/@types/formidable/2.0.5:
resolution: {integrity: sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==}
dependencies:
'@types/node': 18.11.9
dev: true
/@types/jsonwebtoken/8.5.9: /@types/jsonwebtoken/8.5.9:
resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==}
dependencies: dependencies:
@ -197,6 +210,12 @@ packages:
resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
dev: true dev: true
/@types/multer/1.4.7:
resolution: {integrity: sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==}
dependencies:
'@types/express': 4.17.14
dev: true
/@types/node/18.11.9: /@types/node/18.11.9:
resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
dev: true dev: true
@ -253,6 +272,10 @@ packages:
picomatch: 2.3.1 picomatch: 2.3.1
dev: true dev: true
/append-field/1.0.0:
resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
dev: true
/arg/4.1.3: /arg/4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
dev: true dev: true
@ -267,10 +290,6 @@ packages:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
dev: true dev: true
/asap/2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
dev: true
/async/3.2.4: /async/3.2.4:
resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
dev: true dev: true
@ -326,6 +345,13 @@ packages:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true dev: true
/busboy/1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
dependencies:
streamsearch: 1.1.0
dev: true
/bytes/3.1.2: /bytes/3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@ -402,6 +428,16 @@ packages:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true dev: true
/concat-stream/1.6.2:
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
engines: {'0': node >= 0.8}
dependencies:
buffer-from: 1.1.2
inherits: 2.0.4
readable-stream: 2.3.7
typedarray: 0.0.6
dev: true
/content-disposition/0.5.4: /content-disposition/0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@ -429,6 +465,10 @@ packages:
requiresBuild: true requiresBuild: true
dev: true dev: true
/core-util-is/1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
/create-require/1.1.1: /create-require/1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: true dev: true
@ -491,13 +531,6 @@ packages:
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
dev: true dev: true
/dezalgo/1.0.3:
resolution: {integrity: sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==}
dependencies:
asap: 2.0.6
wrappy: 1.0.2
dev: true
/diff/4.0.2: /diff/4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
@ -884,15 +917,6 @@ packages:
resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==}
dev: true dev: true
/formidable/2.0.1:
resolution: {integrity: sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==}
dependencies:
dezalgo: 1.0.3
hexoid: 1.0.0
once: 1.4.0
qs: 6.9.3
dev: true
/forwarded/0.2.0: /forwarded/0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@ -972,11 +996,6 @@ packages:
function-bind: 1.1.1 function-bind: 1.1.1
dev: true dev: true
/hexoid/1.0.0:
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
engines: {node: '>=8'}
dev: true
/http-errors/2.0.0: /http-errors/2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@ -1072,6 +1091,10 @@ packages:
is-docker: 2.2.1 is-docker: 2.2.1
dev: true dev: true
/isarray/1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: true
/js-yaml/3.14.1: /js-yaml/3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true hasBin: true
@ -1240,6 +1263,17 @@ packages:
brace-expansion: 1.1.11 brace-expansion: 1.1.11
dev: true dev: true
/minimist/1.2.7:
resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
dev: true
/mkdirp/0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
dependencies:
minimist: 1.2.7
dev: true
/ms/2.0.0: /ms/2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
dev: true dev: true
@ -1248,6 +1282,19 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true dev: true
/multer/1.4.5-lts.1:
resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==}
engines: {node: '>= 6.0.0'}
dependencies:
append-field: 1.0.0
busboy: 1.6.0
concat-stream: 1.6.2
mkdirp: 0.5.6
object-assign: 4.1.1
type-is: 1.6.18
xtend: 4.0.2
dev: true
/mysql2/2.3.3: /mysql2/2.3.3:
resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==} resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==}
engines: {node: '>= 8.0'} engines: {node: '>= 8.0'}
@ -1303,6 +1350,11 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: true dev: true
/object-assign/4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
dev: true
/object-inspect/1.12.2: /object-inspect/1.12.2:
resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
dev: true dev: true
@ -1375,6 +1427,10 @@ packages:
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
dev: true dev: true
/process-nextick-args/2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
/proxy-addr/2.0.7: /proxy-addr/2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
@ -1398,11 +1454,6 @@ packages:
side-channel: 1.0.4 side-channel: 1.0.4
dev: true dev: true
/qs/6.9.3:
resolution: {integrity: sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==}
engines: {node: '>=0.6'}
dev: true
/range-parser/1.2.1: /range-parser/1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@ -1418,6 +1469,18 @@ packages:
unpipe: 1.0.0 unpipe: 1.0.0
dev: true dev: true
/readable-stream/2.3.7:
resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
dependencies:
core-util-is: 1.0.3
inherits: 2.0.4
isarray: 1.0.0
process-nextick-args: 2.0.1
safe-buffer: 5.1.2
string_decoder: 1.1.1
util-deprecate: 1.0.2
dev: true
/readable-stream/3.6.0: /readable-stream/3.6.0:
resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@ -1438,6 +1501,10 @@ packages:
resolution: {integrity: sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==} resolution: {integrity: sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==}
dev: true dev: true
/safe-buffer/5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: true
/safe-buffer/5.2.1: /safe-buffer/5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: true dev: true
@ -1553,6 +1620,17 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dev: true dev: true
/streamsearch/1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
dev: true
/string_decoder/1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
dev: true
/string_decoder/1.3.0: /string_decoder/1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
dependencies: dependencies:
@ -1677,6 +1755,10 @@ packages:
mime-types: 2.1.35 mime-types: 2.1.35
dev: true dev: true
/typedarray/0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
dev: true
/typescript/4.8.4: /typescript/4.8.4:
resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
engines: {node: '>=4.2.0'} engines: {node: '>=4.2.0'}
@ -1758,6 +1840,11 @@ packages:
optional: true optional: true
dev: true dev: true
/xtend/4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
dev: true
/yallist/2.1.2: /yallist/2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
dev: true dev: true

View File

@ -40,7 +40,7 @@ export default {
// app absolute path // app absolute path
basedir: __dirname, basedir: __dirname,
// path to the API handle folder // path to the API handle folder
files: ["../router/api/*.ts"], files: ["../router/*.ts"],
}, },
logs: { logs: {
level: process.env.LOG_LEVEL || "silly", level: process.env.LOG_LEVEL || "silly",

View File

@ -1,18 +1,18 @@
import * as mysql from "mysql2"; import * as fs from "fs";
import secret from "../config"; import secret from "../config";
import * as mysql from "mysql2";
import * as jwt from "jsonwebtoken"; import * as jwt from "jsonwebtoken";
import { createHash } from "crypto"; import { createHash } from "crypto";
import Logger from "../loaders/logger"; import Logger from "../loaders/logger";
import { Message } from "../utils/enums"; import { Message } from "../utils/enums";
import { Request, Response } from "express";
// import { createMathExpr } from "svg-captcha";
import getFormatDate from "../utils/date"; import getFormatDate from "../utils/date";
import { connection } from "../utils/mysql"; import { connection } from "../utils/mysql";
// import { formidable } from "formidable"; import { Request, Response } from "express";
// let path = require("path"); import { createMathExpr } from "svg-captcha";
const utils = require("@pureadmin/utils");
/** 保存验证码 */ /** 保存验证码 */
// let generateVerify: number; let generateVerify: number;
/** 过期时间 单位:毫秒 默认 1分钟过期方便演示 */ /** 过期时间 单位:毫秒 默认 1分钟过期方便演示 */
let expiresIn = 60000; let expiresIn = 60000;
@ -387,26 +387,56 @@ const searchVague = async (req: Request, res: Response) => {
}); });
}; };
// const upload = async (req: Request, res: Response) => {};
// /** // /**
// * @route GET /captcha // * @route POST /upload
// * @summary 图形验证码 // * @produces application/x-www-form-urlencoded
// * @group captcha - 图形验证码 // * @consumes application/x-www-form-urlencoded
// * @summary 文件上传
// * @group upload - 文件上传
// * @returns {object} 200 // * @returns {object} 200
// * @security JWT
// */ // */
// const captcha = async (req: Request, res: Response) => { const upload = async (req: Request, res: Response) => {
// const create = createMathExpr({ // 文件存放地址
// mathMin: 1, var des_file = "./public/images/" + req.files[0].originalname;
// mathMax: 4, fs.readFile(req.files[0].path, function (err, data) {
// mathOperator: "+", fs.writeFile(des_file, data, function (err) {
// }); if (err) {
// generateVerify = Number(create.text); res.json({
// res.type("svg"); // 响应的类型 success: false,
// res.json({ success: true, data: { text: create.text, svg: create.data } }); data: { message: Message[10] },
// }; });
} else {
res.json({
success: true,
data: {
message: Message[11],
filename: req.files[0].originalname,
filepath: utils.getAbsolutePath(des_file),
},
});
}
});
});
};
/**
* @route GET /captcha
* @summary
* @group captcha -
* @returns {object} 200
*/
const captcha = async (req: Request, res: Response) => {
const create = createMathExpr({
mathMin: 1,
mathMax: 4,
mathOperator: "+",
});
generateVerify = Number(create.text);
res.type("svg"); // 响应的类型
res.json({ success: true, data: { text: create.text, svg: create.data } });
};
export { export {
login, login,
@ -415,6 +445,6 @@ export {
deleteList, deleteList,
searchPage, searchPage,
searchVague, searchVague,
// upload, upload,
// captcha, captcha,
}; };

View File

@ -2,6 +2,7 @@ import app from "./app";
// import * as open from "open"; // import * as open from "open";
import config from "./config"; import config from "./config";
import * as dayjs from "dayjs"; import * as dayjs from "dayjs";
import * as multer from "multer";
import { user } from "./models/mysql"; import { user } from "./models/mysql";
import Logger from "./loaders/logger"; import Logger from "./loaders/logger";
import { queryTable } from "./utils/mysql"; import { queryTable } from "./utils/mysql";
@ -17,8 +18,8 @@ import {
deleteList, deleteList,
searchPage, searchPage,
searchVague, searchVague,
// upload, upload,
// captcha, captcha,
} from "./router/http"; } from "./router/http";
app.post("/login", (req, res) => { app.post("/login", (req, res) => {
@ -45,13 +46,15 @@ app.post("/searchVague", (req, res) => {
searchVague(req, res); searchVague(req, res);
}); });
// app.post("/upload", (req, res) => { // 新建存放临时文件的文件夹
// upload(req, res); const upload_tmp = multer({ dest: "upload_tmp/" });
// }); app.post("/upload", upload_tmp.any(), (req, res) => {
upload(req, res);
});
// app.get("/captcha", (req, res) => { app.get("/captcha", (req, res) => {
// captcha(req, res); captcha(req, res);
// }); });
app.ws("/socket", function (ws, req) { app.ws("/socket", function (ws, req) {
ws.send( ws.send(

View File

@ -10,4 +10,6 @@ export enum Message {
"修改成功", "修改成功",
"删除成功", "删除成功",
"搜索信息不能为空", "搜索信息不能为空",
"文件上传失败",
"文件上传成功",
} }