首页 > 编程语言 >记录一次小程序中讨厌的拍照上传的优化

记录一次小程序中讨厌的拍照上传的优化

时间:2023-04-06 17:11:06浏览次数:34  
标签:拍照 微信 camera 讨厌 上传 page wx

背景

工作中出现了一个业务,需要用户拍照并上传base64格式的图片内容供后台识别。项目并非从零开始,一通配置后跑了起来。自测了一会,下班时间到,开溜。

就在回家路上,打开手机分享图片时傻眼了,相册里全是自测的时候拍摄的照片,感到不舒服,这个项目之前据说已经交付过,我觉得用户肯定和我一样不舒服。

就这样

折腾劲来了~

目标

这次要折腾的目标很明确: 不影响逻辑(已有的代码能不动就不动)、不能再保存拍摄过的照片到相册中

调研结果

现有代码中通过调用wx.chooseMedia来进行拍照上传,微信小程序没有相关配置项,是否保存到相册等等。所以要改用其他的api来实现: 借助camera元素及其api

实现

  • 新建一个page,在wxml中插入camera元素及拍摄按钮,还可以放置其他必要的元素,例如提示框等;

  • 声明一个page的方法,例如getCameraContent用来获取camera相机内容,将此方法绑定到拍摄按钮中;

代码案例:

// wxml
<view class="camera-wrap">
  <camera mode="normal" device-position="front" flash="auto" class="camera"></camera>
  <button type="primary" class="take-btn" bindtap="getCameraContent">
    拍照
  </button>
</view>
// page.js
getCameraContent() {
    return new Promise((resolve) => {
      const cameraContext = wx.createCameraContext();
      cameraContext.takePhoto({
        quality: 'high',
        success: (res) => {
          resolve(res.tempImagePath);
        }
      })
    })
  }

这样在调用getCameraContent().then()时就会拿到微信提供的本地临时路径,后续转换为Base64通过接口发送即可。其他地方逻辑并没有改变,只是改变了从点击上传到调用上传接口之间的逻辑。

这里通过新建页面的方式来实现,因为在之前wx.chooseMedia调用时,会出现相机全屏的行为,我们新方案给了个新页面,行为一致,对用户影响较小。初次之外还可以在页面中插入一些自定义内容,定制化方面很友好。

为什么要改?

我们在微信拍照时通常都是身份证人脸银行卡等一些敏感信息,此类信息在处理时更应该注意安全。

标签:拍照,微信,camera,讨厌,上传,page,wx
From: https://www.cnblogs.com/cyancoco/p/17293284.html

相关文章

  • vue 上传大型文件插件(vue上传视频插件)
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • vue前端实现上传文件,vue 上传文件
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • JavaScript超大文件上传解决方案:分片断点上传(一)
    ​ 前段时间做视频上传业务,通过网页上传视频到服务器。视频大小小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制;2,请求时间过长,请求超时;3,传输中断,必须重新上传导致前功尽弃; 解决方案:1,修改服务端上传的限制配置;Nginx以......
  • input上传文件的实际应用
    'Content-Type':'multipart/form-data'类型使用场景:在vue2.0中,有统一的请求封装文件,下面文件为请求封装的使用,因项目不同可以忽略(vue-element-admin架构)html部分<divclass='public_normal_btn'@click='$refs.file_item.click()'>导入</div><inputsty......
  • php上传文件简单示例
    php上传文件简单示例 <?php$log='';$buf=ob_get_contents();ob_end_clean();$postmaxsize=trim(ini_get('post_max_size'));//preg_match_all('/\d+/',$postmaxsize,$arr);//$number=$arr[0][0];//if(strpos($postmaxsize,&#......
  • PHP上传文件的大小限制
    PHP上传文件的大小限制Warning:POSTContent-Lengthof625523488bytesexceedsthelimitof8388608bytesinUnknownonline0当Warning:online0做出错误警告时,设定error_reporting(0);ini_set("display_errors",0);无效如何不显示这种错误呢方法一:设置php.i......
  • 求PHP超大文件上传解决方案:分片断点上传(一)
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • java文件上传审计
    审计点简述  审计文件名-审计后缀名-审计文件内容-审计点--文件名称1.文件名存在目录穿越漏洞漏洞原因:开发者直接将用户输入的文件名拼接在路径上进行查找漏洞修复:开发者直接指定一个路径,不信任用户的路径(添加一个时间戳)文件名直接拼接产生漏洞:/ab/c+file_name--......
  • 在 Linux 中使用 sFTP 上传或下载文件与文件夹
    导读sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与FTP(文件传输协议)类似。然而,sFTP比FTP更安全;它通过加密SSH传输处理所有操作。它可以配置使用几个有用的SSH功能,如公钥认证和压缩。它连接并登录到指定的远程机器,然后切换到交互式命令模式,在......
  • jsp+servlet实现的人力资源管理系统(实现了注册登录、部门管理、招聘管理、培训管理、
    @目录jsp+servlet实现的人力资源管理系统实现功能截图系统功能使用技术完整源码jsp+servlet实现的人力资源管理系统本系统是一个servlet原生框架实现的人力资源管理系统,实现了注册登录、部门管理、招聘管理、用户管理、薪资管理、职位管理等常用功能。(文末查看完整源码)实现......