index.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. // pages/faceRecognition/index.ts
  2. import { base } from "../../config/index";
  3. Page({
  4. /**
  5. * 页面的初始数据
  6. */
  7. data: {
  8. videoSrc: '', // 录制的视频临时路径
  9. isBack: false, // 是否返回上一页,用于页面隐藏时判断
  10. },
  11. /**
  12. * 生命周期函数--监听页面加载
  13. */
  14. onLoad() {
  15. },
  16. /**
  17. * 生命周期函数--监听页面初次渲染完成
  18. */
  19. onReady() {
  20. },
  21. /**
  22. * 生命周期函数--监听页面显示
  23. */
  24. onShow() {
  25. console.log('页面显示')
  26. this.setData({
  27. isBack: true
  28. })
  29. },
  30. /**
  31. * 生命周期函数--监听页面隐藏
  32. */
  33. onHide() {
  34. // 在录制中退出后台页面隐藏,返回上一页,确保重新进入当前页
  35. // 防止在录制中退出后台导致下次重新录制失败 "operateCamera:fail:is stopping"
  36. console.log('页面隐藏')
  37. if (this.data.isBack) wx.navigateBack()
  38. },
  39. /**
  40. * 生命周期函数--监听页面卸载
  41. */
  42. onUnload() {
  43. },
  44. /**
  45. * 页面相关事件处理函数--监听用户下拉动作
  46. */
  47. onPullDownRefresh() {
  48. },
  49. /**
  50. * 页面上拉触底事件的处理函数
  51. */
  52. onReachBottom() {
  53. },
  54. /**
  55. * 用户点击右上角分享
  56. */
  57. onShareAppMessage() {
  58. },
  59. // 当取消授权或者打开设置授权
  60. handleNoAuth(res: any) {
  61. console.log("用户拒绝授权:", res)
  62. // 因为在设置里授权摄像头不会立即生效,所以要返回上一页,确保重新进入当前页使摄像头生效
  63. setTimeout(() => {
  64. wx.navigateBack()
  65. }, 500)
  66. },
  67. // 版本号过低的回调
  68. handleCannotuse() {
  69. console.log('版本号过低无法使用, 组件内已经弹窗提示过了')
  70. wx.navigateBack()
  71. },
  72. // 视频录制完成
  73. handleComplete(e: WechatMiniprogram.CustomEvent) {
  74. console.log('视频文件路径:', e.detail)
  75. // e.detail: 视频临时路径
  76. this.setData({
  77. videoSrc: e.detail.toString(),
  78. isBack: false
  79. })
  80. // 打印视频信息文件
  81. const fileSystemManager = wx.getFileSystemManager();
  82. fileSystemManager.getFileInfo({
  83. filePath: e.detail.toString(),
  84. success: (res) => {
  85. const {
  86. size
  87. } = res
  88. console.log("视频文件大小M:", size / Math.pow(1024, 2))
  89. },
  90. fail: (err) => {
  91. console.log("获取视频文件失败", err)
  92. }
  93. })
  94. this.uploadVideo()
  95. },
  96. uploadVideo() {
  97. var src = this.data.videoSrc
  98. wx.showLoading({
  99. title: '采集进度:0%',
  100. mask: true //是否显示透明蒙层,防止触摸穿透
  101. })
  102. // todo: 添加上传服务器的接口
  103. const uploadTask = wx.uploadFile({
  104. url: base.url + '/v3/upload',
  105. filePath: src,
  106. name: 'file', //服务器定义的Key值
  107. formData: {},
  108. header: {
  109. Authorization: wx.getStorageSync("token")
  110. },
  111. success: function () {
  112. console.log('视频上传成功')
  113. wx.showToast({
  114. title: "人脸采集完成",
  115. icon: "none",
  116. duration: 2000
  117. })
  118. let time = setTimeout(() => {
  119. clearTimeout(time);
  120. wx.reLaunch({
  121. url: "/pages/downloadPage/index"
  122. })
  123. }, 2000)
  124. },
  125. fail: function (err:any) {
  126. console.log('接口调用失败')
  127. wx.showToast({
  128. title: err.message || "人脸采集失败",
  129. icon: "none",
  130. duration: 2000
  131. })
  132. }
  133. })
  134. //监听上传进度变化事件
  135. uploadTask.onProgressUpdate((res) => {
  136. wx.showLoading({
  137. title: '采集进度:' + res.progress + '%',
  138. mask: true //是否显示透明蒙层,防止触摸穿透
  139. })
  140. })
  141. }
  142. })