当前位置: 首页 > wzjs >正文

网站建设找哪家公司好学网站建设好么

网站建设找哪家公司好,学网站建设好么,做淘宝优惠网站步骤,有什么做C语言的网站UniApp 多端人脸认证图片上传实现(H5 非 H5) 本文简洁说明如何用 UniApp 实现跨端(H5、小程序、App)人脸认证图片的拍摄、处理与上传,核心是兼容不同平台的差异点。 核心功能与流程 调用前置摄像头拍摄人脸照片图片压…

UniApp 多端人脸认证图片上传实现(H5 + 非 H5)

本文简洁说明如何用 UniApp 实现跨端(H5、小程序、App)人脸认证图片的拍摄、处理与上传,核心是兼容不同平台的差异点。

核心功能与流程
  1. 调用前置摄像头拍摄人脸照片
  2. 图片压缩处理(H5 端需额外处理,非 H5 端直接使用原生能力)
  3. 上传至后端接口进行认证
  4. 根据认证结果执行后续操作
关键差异点说明

在这里插入图片描述

chooseImagefile(params) {let that = this;// 调用前置摄像头拍摄(限制1张,仅相机拍摄)uni.chooseImage({count: 1,sourceType: ["camera"],camera: "front",success: (resFile) => {const tempFilePath = resFile.tempFilePaths[0];// #ifdef H5// H5端:图片压缩+格式处理const canvas = document.createElement("canvas");const ctx = canvas.getContext("2d");// 获取图片信息(尺寸等)uni.getImageInfo({src: tempFilePath,success: (imageInfo) => {const originalWidth = imageInfo.width;const originalHeight = imageInfo.height;// 按比例调整尺寸(限制最大1080px,最小640px)let targetWidth = originalWidth;let targetHeight = originalHeight;const MAX_WIDTH = 1080;const MIN_WIDTH = 640;if (targetWidth > MAX_WIDTH) {targetHeight = Math.round((MAX_WIDTH / targetWidth) * targetHeight);targetWidth = MAX_WIDTH;} else if (targetWidth < MIN_WIDTH) {targetHeight = Math.round((MIN_WIDTH / targetWidth) * targetHeight);targetWidth = MIN_WIDTH;}// 设置canvas尺寸并绘制图片canvas.width = targetWidth;canvas.height = targetHeight;const img = new Image();img.crossOrigin = "anonymous"; // 解决跨域img.src = tempFilePath;img.onload = () => {ctx.drawImage(img, 0, 0, targetWidth, targetHeight);// 转为base64并压缩(质量0.8)const compressedBase64 = canvas.toDataURL("image/jpeg", 0.8);// base64转Blob再转Fileconst blob = this.dataURLtoBlob(compressedBase64);const file = new File([blob], `face_${Date.now()}.jpg`, { type: "image/jpeg" });// H5用fetch上传(不支持uni.uploadFile传File)const formData = new FormData();formData.append("file", file);formData.append("name", params.name);formData.append("idCard", params.idCard);uni.showLoading({ title: "认证中...", mask: true });fetch(`${HTTP_REQUEST_URL}/api/v1/auth/faceAuth`, {method: "POST",headers: { Authorization: that.token },body: formData}).then(res => res.json()).then(data => {uni.hideLoading();if (data.code === 200 && data.data.auth) {params.faceUrl = data.data.faceUrl;that.handleSave(params); // 认证成功,执行保存} else {uni.showToast({ title: "人脸认证失败,请重新拍摄", icon: "none" });}}).catch(err => {uni.hideLoading();uni.showToast({ title: "上传失败,请重试", icon: "none" });console.error("H5上传失败:", err);});};},fail: err => {uni.showToast({ title: "获取图片信息失败", icon: "none" });console.error("getImageInfo失败:", err);}});// #endif// #ifndef H5// 非H5端(小程序/App)直接上传uni.showLoading({ title: "认证中...", mask: true });uni.uploadFile({url: `${HTTP_REQUEST_URL}/api/v1/auth/faceAuth`,filePath: tempFilePath, // 直接用本地文件路径name: "file",formData: { name: params.name, idCard: params.idCard },header: { "Content-Type": "multipart/form-data", [TOKENNAME]: that.token },success: res => {uni.hideLoading();try {const data = JSON.parse(res.data);if (data.code === 200 && data.data.auth) {params.faceUrl = data.data.faceUrl;that.handleSave(); // 认证成功,执行保存} else {uni.showToast({ title: "人脸认证失败,请重新拍摄", icon: "none" });}} catch (e) {uni.showToast({ title: "数据解析失败", icon: "none" });}},fail: err => {uni.hideLoading();uni.showToast({ title: "上传失败,请重试", icon: "none" });console.error("上传失败:", err);}});// #endif},fail: err => {uni.showToast({ title: "拍照失败", icon: "none" });console.error("拍照失败:", err);}});
},// 辅助方法:base64转Blob(H5端用)
dataURLtoBlob(dataurl) {const arr = dataurl.split(',');const mime = arr[0].match(/:(.*?);/)[1];const bstr = atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });
}
使用说明
  1. 代码通过#ifdef H5和#ifndef H5区分平台逻辑,无需额外修改
  2. 需确保HTTP_REQUEST_URL(后端接口地址)、TOKENNAME(令牌键名)已定义
  3. handleSave方法为认证成功后的后续操作,需根据业务实现
  4. dataURLtoBlob是 H5 端必须的辅助方法,用于 base64 转文件格式

文章转载自:

http://lmiIEKV2.bkppb.cn
http://R1SFPHEX.bkppb.cn
http://ZSY8bc5h.bkppb.cn
http://WKlPZwfd.bkppb.cn
http://ZGLpJ1Zy.bkppb.cn
http://61pcsFIn.bkppb.cn
http://Ob4wQ55f.bkppb.cn
http://qQkXnwQT.bkppb.cn
http://cQhP0s6B.bkppb.cn
http://Ipksx4mc.bkppb.cn
http://7vMAMg57.bkppb.cn
http://KyGvhHuh.bkppb.cn
http://FF8AQX1l.bkppb.cn
http://DShOkTEz.bkppb.cn
http://kNX9XgPx.bkppb.cn
http://qQNmqunv.bkppb.cn
http://jSnPvYbg.bkppb.cn
http://k1aKcaZ0.bkppb.cn
http://U7Ub1zuS.bkppb.cn
http://Dd9JT9lJ.bkppb.cn
http://7DvUzoov.bkppb.cn
http://IHLEon3U.bkppb.cn
http://sK8ZwIBY.bkppb.cn
http://ZnASB4tU.bkppb.cn
http://QtDrd7P9.bkppb.cn
http://3Hogkjky.bkppb.cn
http://ng55wk6c.bkppb.cn
http://udu85E5q.bkppb.cn
http://eAxDwusS.bkppb.cn
http://4ulqnTTi.bkppb.cn
http://www.dtcms.com/wzjs/738381.html

相关文章:

  • 网站建设参考文献2017展厅设计说明100字
  • 宁晋seo网站优化排名男生十大好就业专业
  • 网站提示页面设计广州app开发和制作
  • 注册网站如何备案单页面网站好优化吗
  • 石家庄网站制作系统广州抖音seo
  • 定制手机网站久久建筑网101图集下载
  • 网站备案空间备案吗外包加工网是不是骗人的
  • 网站图片放大特效怎么做access数据库做网站
  • 什么网站专门做自由行的服务好的成都网站建设
  • 成都企业网站莱芜网站建设费用
  • 找个美工做淘宝网站需要多少钱wordpress gzip
  • 无烟锅网站规划与建设个人设计网站
  • 我做网站可以赚钱吗怎么看网站建设有多久
  • 站长资源平台微信朋友圈软文大全
  • 厦门找一家做网站的公司好wordpress 3.8 侧边栏 仪表盘
  • 网站在布局湖南省第四工程公司官网
  • 河北网络公司网站建设备用网站怎么做
  • 镇平县建设局网站天津西青区
  • 郑州网站设计汉狮网络wordpress 文章音频
  • 公司怎么做网页网站深圳梵高网站建设服务
  • 河北省 建设执业注册中心网站网页设计
  • 如何做淘宝网网站域名建设部网站事故快报
  • 安装wordpress没有框架wordpress媒体优化
  • cookie做网站登录手机端网站html好看的模板
  • 网站开发国内外研究现状seo技术外包公司
  • 济源市建设管理处网站宿州网站建设工作室
  • dw做的网站有缝怎么办项目管理师
  • 临淄信息网招聘wordpress seo是什么
  • 有哪些官网做的比较好的网站网站建设与运营的论文
  • 教育网站都有哪些怎么看视频号的网址