Uniapp踩坑和经验分享② | 小册免费学

1,344 阅读2分钟

本身开发微信小程序为主,文中小程序默认指的是微信小程序相关

本地音频文件上传及安全漏洞过滤处理

记录一次开发小程序过程中上传本地音频文件和安全漏洞处理

小程序选择文件的相关api

1.uni.chooseFile(OBJECT) 选择本地文件,主要用于选择非媒体文件 2.uni.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照 3.uni.chooseVideo(OBJECT) 拍摄视频或从手机相册中选视频,返回视频的临时文件路径 4.uni.chooseMedia(OBJECT) 拍摄或从手机相册中选择图片或视频

👀仔细看上面几个api不难发现,这里面并没有选择音频的api,实际业务中会出现需要上传本地音频的需求。

柳暗花明

仔细再翻文档找找,一个不起眼的api引起注意 wx.chooseMessageFile(Object object) 从客户端会话选择文件。🤔 往下翻看参数type==file,可以选择除了图片和视频之外的其他文件,就它了。

image.png

wx.chooseMessageFile({
   count: 1,
   type: 'file',
   extension:['m4a','wav','mp3','aac'], // ios 和 Android 共有格式
   success: (res) => {
   console.log('chooseMessageFile', res);
   if (res.errMsg == 'chooseMessageFile:ok') {
      // 音频上传
   }
  },
  fail: () => { },
  complete: () => { }
});

image.png

安全顾问的风险提醒

image.png

文件内容的安全检测必不可少,以防止恶意可执行文件伪装成媒体文件上传到生产环境造成破坏。 小程序端只做文件格式过滤,云端上传文件有内容安全过滤。

👆 上面的chooseMessageFile 接口的extension参数里限制一下音频格式,初步过滤 这里的格式是依据微信官方文档兼容水果和安卓端能播放的格式筛选得出。

END

念念不忘必有回响,有效的努力,会让你在未来闪闪发光。

本文正在参与「掘金小册免费学啦!」活动,点击查看活动详情