lazycat818
lazycat818
  • 发布:2023-12-05 12:57
  • 更新:2024-11-03 14:52
  • 阅读:356

app读取已知路径的文件到ArrayBuffer

分类:uni-app

我目前的方案是:
const _getFile = (path) => {
return new Promise((resolve, reject) => {
plus.io.resolveLocalFileSystemURL(path, entry => {
if (entry.isFile) {
entry.file(file => {
resolve(file)
}, err => {
reject(err)
})
} else {
reject("not a file")
}
}, err => {
reject(err)
})
})
}

        const _readBuffer = (file) => {  
            return new Promise((resolve, reject) => {  
                const reader = new plus.io.FileReader()  
                console.log('start to read', Date.now())  
                reader.onload = (e) => {  
                    console.log('read finished', Date.now())  
                    let s = e.target.result  
                    s = s.replace(/^data:[^;]+;base64,/, '')  
                    s = uni.base64ToArrayBuffer(s)  
                    console.log('decode finished', Date.now())  
                    resolve(s)  
                    //resolve(e.target.result)  
                }  
                reader.onerror = (err) => {  
                    reject(err)  
                }  
                reader.readAsDataURL(file)  
                //reader.readAsArrayBuffer(file) //没有这个方法??  
            })  
        }  

就是先读取为base64,然后转换为ArrayBuffer,经过测试读取1M数据时间为约500ms,转换时间约70ms。
为什么不直接提供reader.readAsArrayBuffer(file),读取的直接结果不应该就是ArrayBuffer吗?去掉编码解码时间,可以提速30%左右。这个需求貌似几年前就有人提过,是有什么其他限制?

2023-12-05 12:57 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

同,真的很需要这个功能!,从base64再转二进制和直接获取为二进制也有区别吧

翼账科技

翼账科技

同问,这个场景很常见,现在很多上传请求后端都需要put请求了,而uni.uploadFile又只能方式post请求;

要回复问题请先登录注册