无
- 发布:2024-04-16 17:28
- 更新:2024-10-24 15:49
- 阅读:684
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 4.12
手机系统: Android
手机系统版本号: Android 14
手机厂商: 魅族
手机机型: 20
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
无
无
实际结果:
无
无
bug描述:
app分片上传是一个很常见的需求,可是要在uniapp上面实现需求,真是举步维艰,我替广大开发者详细描述。
前提:上传到国内主流的OSS,七牛,阿里
1、首先通过plus.gallery.pick或者uni.chooseVideo两个API获取到的file文件,调用file.slice得到的chunk分片,其属性fullPath指向原文件,所以直接上传该chunk的话,其上传的是原文件。
所以只有两条路
2、先来看看第一条路:将该文件缓存到运行内存或者复制一份切片chunk存到沙盒目录
- 通过 plus.io.FileReader() 的 reader.readAsDataURL(chunk)方法获取到base64的切片base64chunk
- 将切片base64chunk通过uni.base64ToArrayBuffer转为ArrayBuffer对象
- 然后通过uni.request()上传二进制文件,此处无法使用uni.uploadFile和plus.uploader,因为不支持传二进制文件,所以没有很好的方式渲染上传进度
- 在安卓10以前的手机上,前面所述流程是能上传了。可是targetSdkVersion>=29的安卓10+,在第一步reader.readAsDataURL就报错了
- 自此我已放弃这条路了,后续只能将ArrayBuffer对象从运行缓存存到沙盒,然后读取该文件存的路径上传,传完后删除该片段,频繁的读写存储内存,很不友好
3、然后看看我预想的第二条路,通过嵌入一个本地HTML网页,通过H5的切片上传完成需求,这虽然能实现,但是这曲线救国的路线,想想也是可悲
rivenx
你好,我也遇到这个问题了,解决了么?有偿
2024-11-14 22:57