cq_crab
cq_crab
  • 发布:2024-04-16 17:28
  • 更新:2024-10-24 15:49
  • 阅读:757

【报Bug】app分片上传是一个很常见的需求,可是要在uniapp上面实现需求,真是举步维艰,我替广大开发者详细描述

分类:uni-app

产品分类: 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.uploadFileplus.uploader,因为不支持传二进制文件,所以没有很好的方式渲染上传进度
  • 在安卓10以前的手机上,前面所述流程是能上传了。可是targetSdkVersion>=29的安卓10+,在第一步reader.readAsDataURL就报错了
  • 自此我已放弃这条路了,后续只能将ArrayBuffer对象从运行缓存存到沙盒,然后读取该文件存的路径上传,传完后删除该片段,频繁的读写存储内存,很不友好

3、然后看看我预想的第二条路,通过嵌入一个本地HTML网页,通过H5的切片上传完成需求,这虽然能实现,但是这曲线救国的路线,想想也是可悲

2024-04-16 17:28 负责人:无 分享
已邀请:
c***@163.com

c***@163.com

同楼主,我也是遇到了分片上传,解决了好多天,至今没有比较好的解决方案,直接切割的 file.slice,转化成base64 后和 源文件直接转化的base64不同,导致切片整合的文件损坏。。。

  • rivenx

    你好,我也遇到这个问题了,解决了么?有偿

    2024-11-14 22:57

  • 1***@163.com

    回复 rivenx: 你好,解决了吗

    2024-12-25 14:18

c***@163.com

c***@163.com

Me too;我也是在做文件的分片,目前来看好像就只能自己写插件,插件市场没有合适的,被这玩意搞得要受不了了!真是垃圾玩意!

  • 1***@163.com

    你好,有合适的方案吗

    2024-12-25 14:17

要回复问题请先登录注册