前端提高篇(七十四):FileReader文件操作及Blob对象,金三银四旗开得胜

52 阅读3分钟

if (fileList[i].type == 'image/png'){

//执行上传代码

alert(fileList[i].name + '上传成功!');

}

}

}

已经选择了两个文件,一个png图片,一个txt文件,然后点击提交:

在这里插入图片描述

**FileReader对象

负责把文件读入内存,并且读取文件中的数据**

1.读取并显示文件

readAsText() 将文件中的数据读取成文本数据

readAsBinaryString()读取为二进制字符串

readAsDataURL()读取为DataURL字符串

readAsArrayBuffer()读取为一个ArrayBuffer对象

abort()终端读取操作

2.检测读取事件

onabort:数据读取中断时触发

onprogress:数据读取中触发

onerror:数据读取出错时触发

onload:数据读取完成并成功时触发

onloadstart:数据开始读取时触发

onloadend:数据读取完成时触发,不论成功还是失败

btn.onclick = function(){

var fileList = file.files;

var len = fileList.length;

// console.log(fileList);

for (var i = 0; i < len; i++){

if (fileList[i].type == 'image/png'){

//执行上传代码

alert(fileList[i].name + '上传成功!');

}else if (fileList[i].type == 'text/plain'){

var reader = new FileReader();

reader.readAsText(fileList[i]);//读取具体内容,此处不能写this,指的是btn

reader.onload = function(){

console.log(reader.result);//读取完成后打印内容

//执行上传操作

}

}

}

}

效果:

在这里插入图片描述

如果读取成二进制,中文会乱码

文本内容是:hello 世界

读取成文本:

在这里插入图片描述

读取成二进制readAsBinaryString:

在这里插入图片描述

readAsDataURL可以用来读取图片,转为base64格式:

btn.onclick = function(){

var fileList = file.files;

var len = fileList.length;

// console.log(fileList);

for (var i = 0; i < len; i++){

if (fileList[i].type == 'image/png'){

alert(fileList[i].name + '上传成功!');

var reader = new FileReader();

reader.readAsDataURL(fileList[i]);

reader.onload = function(){

console.log(reader.result);

var img = new Image();

img.src = reader.result;

document.body.appendChild(img);//将图片加到dom中

}

}

}

}

获取图片的DataURL,即base64编码,赋给新img,再将img加到dom中:

在这里插入图片描述

Blob对象

1.blob对象的访问

2.blob对象的创建

3.截取blob对象

blob可以存储只读原始数据的类文件,可以用于存储二进制数据;

File接口基于Blob,继承了Blob的功能(type和size属性),blob支持截取文件,比如上传一个大视频,会截取成几段再传

var blob = new Blob(['asdf']);

var reader = new FileReader();

reader.readAsText(blob);

reader.onload = function(){

console.log(reader.result);

}//打印结果是:asdf

reader.readAsText(blob.slice(0,2));//截取前两个

reader.onload = function(){

console.log(reader.result);

}//打印结果是:as

btn.onclick = function(){

var fileList = file.files;

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料

前端路线图

vue.js的36个技巧 开源分享:docs.qq.com/doc/DSmRnRG…