A. 技术干货 | “选图预览并上传”的场景如何解全网最全方案汇总来了
选择本地相册图片或拍照,然后预览并上传,是移动应用中的常见场景。客户反馈此类需求时,经常遇到上传过程中的问题。为解决这一问题,我们提出了以下优化方案。
方案1:使用Android原生WebView
通过在前端使用标签,调用Android原生Webview支持实现选择文件上传。然而,此方案存在局限性,WebView不支持直接选择文件,需要自定义扩展WebChromeClient的openFileChooser或onShowFileChooser方法,以唤起系统文件选择器。返回的URI格式多样,需进行统一处理。
方案2:利用mPaaS的H5容器
业务使用mPaaS的H5容器后,内置了唤起文件选择器的操作,但仍存在系统选择器不可控的风险。部分客户对于唤起后的文件选择界面不满意。
方案3:实现JSAPI唤起Native自定义选图页面
通过利用H5容器的自定义JSAPI功能,自定义一个选图页面,前端调用唤起Native界面。结果以Base64形式返回,解决了系统选择文件的不可控问题。
然而,方案3存在返回Base64数据过大导致低端设备OOM问题和大量Base64转JSON引发的ANR问题。
方案4:选图返回本地路径,WebView拦截访问本地资源
为解决返回Base64数据稳定性问题,选图后返回本地路径,Native模块拦截WebView访问本地资源,实现本地图片加载显示。采用自定义域名进行资源拦截,解决了Base64传递问题。
文件上传方案
在选图方案基础上,我们对比了各种上传方案,沉淀了最佳实践。上传过程经历了从使用RPC接口到使用OSS方案的转变。
方案1:使用RPC接口上传
通过mPaaS的RPC接口上传文件,但遇到文件过大导致服务端报错的稳定性问题,且对大文件上传存在风险。
方案2:使用OSS方案上传
推荐直接使用OSS方案上传文件,OSS专门解决文件上传场景,用户集成对应的SDK即可实现本地文件上传,适合解决各种文件上传需求。