BeginFaceReco.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const API = require("../../../lib/API.js")
  2. const db = require("../../../plugin/DataBase/db.js")
  3. const axios = require('axios')
  4. const config = require('../../../config.json')
  5. const { BaseStdResponse } = require("../../../BaseStdResponse.js")
  6. class BeginFaceReco extends API {
  7. constructor() {
  8. super()
  9. this.runpy = config.runpy
  10. this.setPath('/Face/BeginFaceReco')
  11. this.setMethod('POST')
  12. }
  13. /**
  14. * 获取图片并转换为Base64
  15. * @param {string} url - 图片链接
  16. * @returns {Promise<string>} - Base64字符串
  17. */
  18. async getImageBase64(url) {
  19. try {
  20. const response = await axios.get(url, {
  21. proxy: false,
  22. responseType: "arraybuffer"
  23. })
  24. const base64 = Buffer.from(response.data, "binary").toString("base64")
  25. // 获取图片MIME类型
  26. const contentType = response.headers["content-type"]
  27. return `data:${contentType};base64,${base64}`
  28. } catch (error) {
  29. throw new Error(`获取图片失败: ${error.message}`)
  30. }
  31. }
  32. async onRequest(req, res) {
  33. let { student_num, name } = req.body
  34. if ([student_num, name].some(value => value === '' || value === null || value === undefined))
  35. return res.json({
  36. ...BaseStdResponse.MISSING_PARAMETER
  37. })
  38. try {
  39. let sql = 'SELECT student_num, name, user_avatar, academy_name FROM lepao_account WHERE student_num = ? AND name = ?'
  40. let rows = await db.query(sql, [student_num, name])
  41. if (!rows)
  42. return res.json({
  43. ...BaseStdResponse.DATABASE_ERR,
  44. msg: '获取用户人脸信息失败,请重试'
  45. })
  46. if (rows.length !== 1)
  47. return res.json({
  48. ...BaseStdResponse.ERR,
  49. msg: '该用户尚未在RunForge系统中添加,请先添加账号'
  50. })
  51. const face_img = await this.getImageBase64('https://lepao-cloud.xxoo365.top/view.php/d0b85269c3683ed48da1fc5e468108c7.jpg')
  52. // 此时应该从乐跑获取人脸照片
  53. let resData = {
  54. ...rows[0],
  55. face_img
  56. }
  57. res.json({
  58. ...BaseStdResponse.OK,
  59. data: resData
  60. })
  61. } catch (error) {
  62. this.logger.error(`获取用户人脸信息失败。${error.stack}`)
  63. return res.json({
  64. ...BaseStdResponse.ERR,
  65. msg: '获取用户人脸信息失败,请重试'
  66. })
  67. }
  68. }
  69. }
  70. module.exports.BeginFaceReco = BeginFaceReco