JavaScript 之 FileReader简介以及原生uniapp如何将文件转成base64编码字符串示例

Posted zhuangwei_8256

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 之 FileReader简介以及原生uniapp如何将文件转成base64编码字符串示例相关的知识,希望对你有一定的参考价值。

利用 FileReader对象,详情查看MDN官方说明点击这里

FileReader 对象简介

  • FileReader对象的方法:
方法参数简介说明
FileReader.readAsBinaryString(blob)即将被读取的 Blob 或者 File 对象将文件读取为二进制编码会读取指定的 Blob 或 File 对象,当读取完成的时候,readyState 会变成DONE(已完成),并触发 loadend (en-US) 事件,同时 result 属性将包含所读取文件原始二进制格式。该方法已从 FileAPI 标准移除,请使用 FileReader.readAsArrayBuffer() 代替。
FileReader.readAsArrayBuffer(blob)即将被读取的 Blob 或 File 对象。用于替换FileReader.readAsBinaryString(blob)的方法用于启动读取指定的 Blob 或 File 内容。当读取操作完成时,readyState 变成 DONE(已完成),并触发 loadend (en-US) 事件,同时 result 属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据。
FileReader.abort()中断读取操作该方法可以取消 FileReader 的读取操作,触发之后 readyState 为已完成(DONE);无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中。
FileReader.readAsDataURL(blob)即将被读取的 Blob 或 File 对象。将文件读取为DataURL(base64)会读取指定的 Blob 或 File 对象。读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend (en-US) 事件,同时 result 属性将包含一个data:URL格式的字符串(base64编码)以表示所读取文件的内容。
FileReader.readAsText(blob[, encoding])blob:二进制对象Blob或 File类型;encoding:可选,字符串类型的编码类型,默认为“utf-8”类型将文件读取为文本,其中第二个参数是文本的编码方式,默认值为 UTF-8可以将 Blob 或者 File 对象转根据特殊的编码格式转化为内容(字符串形式);这个方法是异步的,也就是说,只有当执行完成后才能够查看到结果,如果直接查看是无结果的,并返回undefined;也就是说必须要挂载 实例下的 onload 或 onloadend 的方法处理转化后的结果;当转化完成后, readyState 这个参数就会转换 为 done 即完成态, event(“loadend”) 挂载的事件会被触发,并可以通过事件返回的形参得到中的 FileReader.result 属性得到转化后的结果
  • 相关事件(点击事件名查看示例):
事件说明
FileReader.onabort该事件在读取操作被中断时触发。
FileReader.onerror该事件在读取操作发生错误时触发。
FileReader.onload该事件在读取操作完成时触发。
FileReader.onloadstart该事件在读取操作开始时触发。
FileReader.onloadend该事件在读取操作结束时(要么成功,要么失败)触发。
FileReader.onprogress该事件在读取Blob时触发。


原生中的具体使用方法如下

// 创建一个input 文件选择表单元素
var input = document.createElement('input');
input.type = 'file'; // 文件选择表单元素的类型
input.id = 'file';
input.name = 'file';
// 文件选择表单元素的样式
input.style.cssText = `
	width: 70%;
	margin: 10px 0 10px 0;
`;
// 将创建的文件选择表单元素添加到某元素中
let uploadDom = document.getElementById("upload");
uploadDom .appendChild(input);
// 文件选择表单元素的change事件
input.onchange = e => 
	const file = e.target.files[0];
	this.urls = window.webkitURL.createObjectURL(file)
	if(file.size > (1024*1024 * 50))
		alert('单个文件请勿超过50M,请重新上传')
	
	let fileFullName = file.name; // 文件全称
	let fileName = file.name.split('.')[0]; // 文件名称
	let fileType = file.name.split('.')[1]; // 文件类型
	// 创建一个FileReader 对象
	var reader = new FileReader();
	reader.readAsDataURL(file);
	reader.onload = function(e)
		let byte_64 = reader.result.substring(reader.result.indexOf(',')+1);  // 文件字节流字符串(base64编码)
	


uniapp中的具体使用方法如下

uni.chooseFile(
	count: 1, //默认9
	sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
	success: chooseFile => 
		console.log('chooseFile', chooseFile);
		const tempFiles = chooseFile.tempFiles;
		var reader = new FileReader();
		reader.readAsDataURL(tempFiles[0]);
		reader.onload = e => 
			this.fileFullName = tempFiles[0].name; // 文件全称
			this.byte_64 = e.target.result.split(';base64,')[1]; // 文件字节流字符串(base64编码)
			this.fileName = tempFiles[0].name.split('.')[0]; // 文件名称
			this.fileType = tempFiles[0].name.split('.')[1]; // 文件类型
		;
	
);

注:这里使用了不用的截取字符串的方式截取base64的字节流编码,自行选择方式即可。


如有不足,望大家多多指点! 谢谢!

以上是关于JavaScript 之 FileReader简介以及原生uniapp如何将文件转成base64编码字符串示例的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 之 FileReader简介以及原生uniappvue如何将文件转成base64编码字符串示例

JavaScript 中的FileReader对象(实现上传图片预览)

JavaScript中 FileReader 对象详解

3分钟上手JS中的FileReader对象(实现上传图片预览)

javascript_FIleReader对象

带有 FileReader() 的 Javascript 承诺