feat:用户上传头像

This commit is contained in:
juzeon 2021-09-26 16:47:02 +08:00
父節點 660dfb10fd
當前提交 008ffdfd7c
共有 7 個檔案被更改,包括 43 行新增4 行删除

查看文件

@ -14,6 +14,7 @@
"dependencies": { "dependencies": {
"@types/cors": "^2.8.12", "@types/cors": "^2.8.12",
"@types/express": "^4.17.13", "@types/express": "^4.17.13",
"@types/express-fileupload": "^1.1.7",
"@types/express-jwt": "^6.0.2", "@types/express-jwt": "^6.0.2",
"@types/jsonwebtoken": "^8.5.4", "@types/jsonwebtoken": "^8.5.4",
"@types/node": "^16.4.1", "@types/node": "^16.4.1",
@ -25,8 +26,10 @@
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"express-async-handler": "^1.1.4", "express-async-handler": "^1.1.4",
"express-fileupload": "^1.2.1",
"express-jwt": "^6.0.0", "express-jwt": "^6.0.0",
"express-validator": "^6.12.1", "express-validator": "^6.12.1",
"form-data": "^4.0.0",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"promise-mysql": "^5.0.3", "promise-mysql": "^5.0.3",
"qs": "^6.10.1", "qs": "^6.10.1",

查看文件

@ -5,6 +5,7 @@ export function fillIUser(single: any) {
id: single.id, id: single.id,
username: single.username, username: single.username,
realName: single.realName, realName: single.realName,
avatar: single.avatar,
role: single.role role: single.role
} }
} }

查看文件

@ -9,10 +9,12 @@ import type {ErrorRequestHandler} from "express"
import {IResultJson} from "./types" import {IResultJson} from "./types"
import {postRouter} from "./routers/post-router" import {postRouter} from "./routers/post-router"
import {adminRouter} from "./routers/admin-router" import {adminRouter} from "./routers/admin-router"
import fileUpload from "express-fileupload"
const app = express() const app = express()
app.use(cors()) app.use(cors())
app.use(fileUpload())
app.use(express.urlencoded({extended: true})) app.use(express.urlencoded({extended: true}))
app.use( app.use(
expressJWT({ expressJWT({

查看文件

@ -28,4 +28,8 @@ export class UserModel {
} }
return fillIUser(user[0]) return fillIUser(user[0])
} }
async updateAvatar(id: number, avatar: string) {
await db.query('update users set avatar=? where id=?', [avatar, id])
}
} }

查看文件

@ -2,10 +2,11 @@ import 'reflect-metadata'
import express from "express" import express from "express"
import {Container} from "typedi" import {Container} from "typedi"
import {UserService} from "../services/user-service" import {UserService} from "../services/user-service"
import {body, validationResult,} from "express-validator" import {body, check, validationResult,} from "express-validator"
import {hasValidationErrors} from "../includes" import {hasValidationErrors, resultJson} from "../includes"
import {JWTUserPayload} from "../types" import {JWTUserPayload} from "../types"
import expressAsyncHandler from "express-async-handler" import expressAsyncHandler from "express-async-handler"
import {UploadedFile} from "express-fileupload"
let userService = Container.get(UserService) let userService = Container.get(UserService)
@ -18,8 +19,17 @@ userRouter.post('/login',
res.json(await userService.login(req.body.username, req.body.password)) res.json(await userService.login(req.body.username, req.body.password))
}) })
) )
userRouter.get('/me',expressAsyncHandler(async (req:express.Request,res:express.Response)=>{ userRouter.get('/me', expressAsyncHandler(async (req: express.Request, res: express.Response) => {
res.json(await userService.me(req.user as JWTUserPayload)) res.json(await userService.me(req.user as JWTUserPayload))
})) }))
userRouter.post('/uploadAvatar',
expressAsyncHandler(async (req: express.Request, res: express.Response) => {
if (!req.files?.image) {
res.json(resultJson.error('请选择要上传的图片'))
return
}
res.json(await userService.uploadAvatar(req.user as JWTUserPayload, req.files.image as UploadedFile))
})
)
export {userRouter} export {userRouter}

查看文件

@ -7,6 +7,9 @@ import qs from 'qs'
import jwt from "jsonwebtoken" import jwt from "jsonwebtoken"
import {appConfig} from "../config" import {appConfig} from "../config"
import {JWTUserPayload} from "../types" import {JWTUserPayload} from "../types"
import fileUpload, {UploadedFile} from "express-fileupload"
import axios from "axios"
import FormData from "form-data"
@Service() @Service()
export class UserService { export class UserService {
@ -29,6 +32,7 @@ export class UserService {
rsa, rsa,
ul: username.length.toString(), ul: username.length.toString(),
pl: password.length.toString(), pl: password.length.toString(),
lt: ticket,
execution: 'e1s1', execution: 'e1s1',
_eventId: 'submit' _eventId: 'submit'
})) }))
@ -51,7 +55,21 @@ export class UserService {
} }
async me(jwtUserPayload: JWTUserPayload) { async me(jwtUserPayload: JWTUserPayload) {
let user=await this.userModel.findUserById(jwtUserPayload.id) let user = await this.userModel.findUserById(jwtUserPayload.id)
return resultJson.success(user) return resultJson.success(user)
} }
async uploadAvatar(jwtUserPayload: JWTUserPayload, image: UploadedFile) {
let form = new FormData()
form.append('image', image.data, image.name)
let resp = await axios.post('https://image.kieng.cn/upload.html?type=jd', form, {
headers: form.getHeaders()
})
if (resp.data.code !== 200) {
return resultJson.error(resp.data.msg)
}
let avatar: string = resp.data.data.url
await this.userModel.updateAvatar(jwtUserPayload.id, avatar)
return resultJson.success(avatar)
}
} }

查看文件

@ -9,6 +9,7 @@ export interface IUser {
id?: number, id?: number,
username: string, username: string,
realName: string, realName: string,
avatar?: string,
role: TUserRole role: TUserRole
} }