uni-app plus.io.FileReader读取视频文件会直接卡死(40S以上,120M大小)
uni-app plus.io.FileReader读取视频文件会直接卡死(40S以上,120M大小)
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
vue |
产品分类
uni小程序SDK
手机系统
iOS
手机系统版本号
iOS 16
手机厂商
苹果
手机机型
iphone 13 pro, iphone 13 mini
页面类型
vue
SDK版本号
4.36
示例代码
plus.io.resolveLocalFileSystemURL(
resApp.videoPath,
function (entry) {
entry.file(
function (file) {
_this.fileData2 = JSON.stringify(file)
var reader = new plus.io.FileReader()
reader.readAsDataURL(file)
reader.onload = function (e) {
_this.fileData1 = e.target.result
setTimeout(() => {
Toast(`onLoad视频读取文件成功1222:` + _this.fileData1)
}, 3000)
}
reader.onloadend = function (e) {
return
}
reader.onerror = function (e) {
Toast(`readeronerror文件失败::${e.target.result}`)
}
},
function (e) {
Toast(`读取文件出错2:${JSON.stringify(e)}`)
reject(index)
}
)
},
function (e) {
Toast(`读取文件出错222`)
}
)
操作步骤
选择原生给我的视频文件,然后通过
预期结果
可以读取bas64进行视频文件路径,然后通过plus.io.resolveLocalFileSystemURL
方法进行转成base64进行上传
实际结果
无法读取,直接崩了
bug描述
在12promax 可以,在iphone 13 mini 中必现 ,40S以上,120M大小
更多关于uni-app plus.io.FileReader读取视频文件会直接卡死(40S以上,120M大小)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
感觉就是转成base64太大导致的,请问这种有什么方案吗
更多关于uni-app plus.io.FileReader读取视频文件会直接卡死(40S以上,120M大小)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
顶一手
有解决方案吗
关于uni-app中plus.io.FileReader读取大视频文件卡死的问题分析
这个问题主要是由于iOS设备上使用FileReader读取大文件时性能限制导致的。对于120MB的视频文件,转换为base64会消耗大量内存和CPU资源,特别是在性能较低的设备上(如iPhone 13 mini)更容易出现卡死。
问题原因
- 内存压力:将大文件转换为base64会导致内存占用激增,iOS设备可能会强制终止应用
- 同步处理:FileReader的readAsDataURL是同步操作,会阻塞主线程
- 设备性能差异:iPhone 12 Pro Max有6GB内存,而13 mini只有4GB
解决方案建议
-
避免转换大文件为base64:
- 直接上传文件路径而不是base64
- 使用分片上传方式处理大文件
-
使用更高效的文件处理方式:
// 使用plus.uploader直接上传文件
plus.uploader.createUpload(url, {
method: "POST"
}, function(t, status) {
// 上传回调
}).addFile(filePath, {
key: "file"
}).start();