当前位置:   article > 正文

uniapp不同平台获取文件内容以及base64编码特征_小程序 uni-file-picker 获取base64_uinapp app 读取文件转成base64

uinapp app 读取文件转成base64

#### APP获取 ArrayBuffer以及读取base64:



  • 1
  • 2
  • 3
  • 4
  • 5

const H5PlusReadFileArrayBuffer = (filePath) => {
return new Promise((resolve, reject) => {
try {
plus.io.resolveLocalFileSystemURL(
filePath,
function (entry) {
entry?.file(function (file) {
const fileReader = new plus.io.FileReader()
fileReader.readAsDataURL(file, ‘utf-8’)
fileReader.onloadend = function (evt) {
const result = {
base64: evt.target.result.split(‘,’)[1],
size: file.size,
}
resolve(uni.base64ToArrayBuffer(result.base64))
}
})
},
function (error) {
reject(error)
},
)
} catch (error) {
reject(error)
}
})
}


app方面是直接先读取base64,再读取arrayBuffer,所以一气呵成。


#### 综合:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

import SparkMD5 from ‘spark-md5’;
export interface FileReaderInfo {
fileHeader64:string;//–base64形式的文件前一段内容,用于传递magicNumber进行判断。
base64:string;
arrayBuffer:any;
tempPath:string;//形式如下:blob:http://localhost:3000/5fd140d3-1372-4394-8b08-0cba8c508099
mime:string;
errMsg?:string;
md5:string,//–获取文件md5.
}

// #ifdef H5
// 通过blob:url读取实际的blob数据
function h5_blobURLToBlob (url:string) :Promise {
return new Promise((resolve, reject) => {
var http = new XMLHttpRequest();
http.open(‘GET’, url, true)
http.responseType = ‘blob’;
http.onload = function (e) {
if (this.status == 200 || this.status === 0) {
resolve(this.response)
} else {
reject(this.status)
}
};
http.send()
})
}

// 通过blob:url读取实际的ArrayBuffer数据
function H5ReadBlobUrl(blobUrl:string,mimeType:string): Promise {

 let intervalInst:any=null;
 const fileinfo:FileReaderInfo={
     fileHeader64:"",
     tempPath:blobUrl,
     arrayBuffer:null,
     base64:"",
     mime:mimeType,
     md5:"",
 };

 return new Promise<FileReaderInfo>(async (resolve, reject) => {

    try {
        const reader = new FileReader();
        const reader64 = new FileReader();
        // blob数据转file对象数据
        const fileBlob: any = await h5_blobURLToBlob(blobUrl);
        const file = new window.File([fileBlob], 'file.name', { type: mimeType });
        // 读取file对象ArrayBuffer
        reader.readAsArrayBuffer(file);
        reader64.readAsDataURL(file);
        reader.onload = function (e) {

            const data:any=e?.target?.result;
            // let spark = new SparkMD5(); // 创建md5对象(基于SparkMD5)
            let spark = new SparkMD5.ArrayBuffer();
            spark.append(data);
            fileinfo.md5=spark.end();
            fileinfo.arrayBuffer=data;
        };
        reader64.onload = function (e) {
            fileinfo.base64=(e?.target?.result+"");
            let subPosIdx = (fileinfo.base64 + "").indexOf(",");
            let headerContent = fileinfo.base64.substr(subPosIdx + 1, 160);
            fileinfo.fileHeader64=headerContent;
        };
        intervalInst=setInterval(()=>{
            if(fileinfo.base64&&fileinfo.arrayBuffer){
                clearInterval(intervalInst);
                resolve(fileinfo);
            }
        },100);
    } catch (e) {
        if(intervalInst){
            clearInterval(intervalInst);
        }
        reject(e)
    }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

}
// #endif

// #ifdef APP-PLUS
// 通过plus.io读取文件的ArrayBuffer数据
function H5PlusReadFile (filePath:string,mimeType:string) :Promise {
const fileinfo:FileReaderInfo={
fileHeader64:“”,
tempPath:filePath,
arrayBuffer:null,
base64:“”,
mime:mimeType,
md5:“”,
};
return new Promise((resolve, reject) => {
try {
plus.io.resolveLocalFileSystemURL(
filePath,
function (entry:any) {
entry?.file(function (file:any) {
const fileReader = new plus.io.FileReader();
fileReader.readAsDataURL(file, ‘utf-8’);
fileReader.onloadend = function (evt:any) {
fileinfo.base64=(evt?.target?.result+“”);
let subPosIdx = (fileinfo.base64 + “”).indexOf(“,”);
let headerContent = fileinfo.base64.substr(subPosIdx + 1, 160);
fileinfo.fileHeader64=headerContent;
const result = {
base64: evt.target.result.split(‘,’)[1],
size: file.size,
};
const data:any=uni.base64ToArrayBuffer(result.base64);
// let spark = new SparkMD5(); // 创建md5对象(基于SparkMD5)
let spark = new SparkMD5.ArrayBuffer();
spark.append(data);
fileinfo.md5=spark.end();
fileinfo.arrayBuffer=data;
resolve(fileinfo);
}
})
},
function (error) {
reject(error)
},
)
} catch (error) {
reject(error)
}
})
}
// #endif

function MpReadFile(filePath:string,mimeType:string) :Promise{
const fileinfo:FileReaderInfo={
fileHeader64:“”,
tempPath:filePath,
arrayBuffer:null,
base64:“”,
mime:mimeType,
md5:“”,
};
return new Promise((resolve, reject) => {
if (uni.canIUse(‘getFileSystemManager’) && uni.getFileSystemManager) {

    }else{
        fileinfo.errMsg="无效环境,不可调用api!";
        reject(fileinfo);
        return ;
    }
    const fs = uni.getFileSystemManager();
    const data:any = fs.readFileSync(filePath);
    // let spark = new SparkMD5(); // 创建md5对象(基于SparkMD5)
    let spark = new SparkMD5.ArrayBuffer();
    spark.append(data);
    fileinfo.md5=spark.end();
    fileinfo.arrayBuffer=data;
    fs.readFile({// 【重点来啦】人家自提供的转码API
        filePath: filePath,// 所需转码图像路径
        encoding: "base64",// 转码类型
        success: (res) => {
            // 生成base64
            // let imageBase64 = 'data:image/' + image.type + ';base64,' + res.data;
            let imageBase64 = res.data;
            console.log('转base64后:', imageBase64);
            fileinfo.base64=(imageBase64+"");
            let subPosIdx = (fileinfo.base64 + "").indexOf(",");
            let headerContent = fileinfo.base64.substr(subPosIdx + 1, 160);
            fileinfo.fileHeader64=headerContent;
            resolve(fileinfo);
        }
    });
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

}

// 对外暴露的方法,通过这个方法获取文件的ArrayBuffer,内部会根据平台调用不同的方法
export const readFileDataExt = async (filePath:string,mimeType:string) : Promise => {
if (uni.canIUse(‘getFileSystemManager’) && uni.getFileSystemManager) {
return MpReadFile(filePath,mimeType);
}
// #ifdef APP-PLUS
else if (plus.io) {
return H5PlusReadFile(filePath,mimeType);
}
// #endif
// #ifdef H5
else if (XMLHttpRequest) {
return H5ReadBlobUrl(filePath,mimeType);
}
// #endif
else {
throw new Error(‘不支持的平台’);
}
};


### 实际运行效果


#### H5平台


选择图片进行上传:图片的数据如下:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6baf256fc4fe4ba7a882a621c676fbd5.png#pic_center)  


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/3c3ac3f3e2b05bdb26163fa98ce4fa6f.png)
![img](https://img-blog.csdnimg.cn/img_convert/3084d2e13135738c3c18bfb3196f3939.png)
![img](https://img-blog.csdnimg.cn/img_convert/56e3851d1db69799f83a1b34725aea8b.png)
![img](https://img-blog.csdnimg.cn/img_convert/0ccb2788652a521f4621d4813bf21969.png)
![img](https://img-blog.csdnimg.cn/img_convert/1e7992eacb7830b70c25683be85a219d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
![img](https://img-blog.csdnimg.cn/img_convert/2b909fa92392bd06edb2cc53dcc36aff.png)

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**



**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
[外链图片转存中...(img-05VJi486-1712991350310)]

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/632734
推荐阅读
相关标签
  

闽ICP备14008679号