uniapp图片转base64及JS各文件类型相互转换

这篇具有很好参考价值的文章主要介绍了uniapp图片转base64及JS各文件类型相互转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、chooseImage + request + arrayBufferToBase64

App H5 微信小程序 快手小程序 京东小程序

功能限制主要在arrayBufferToBase64
uniapp图片转base64及JS各文件类型相互转换

getImg() {
	uni.chooseImage({
		success: async (res) => {
			// 等待全部完成后再接收结果
			let base64List = await Promise.all(res.tempFiles.map((item, index) => {
				return this.tempToBase64(item)
			}))
		}
	})
},
tempToBase64(tempFiles) {
	return new Promise((resolve, reject) => {
		wx.request({
			url: tempFiles.path,
			responseType: 'arraybuffer',
			success: (res) => {
				
				// 避免获取不到文件类型
				if (!tempFiles.type) {
					uni.getImageInfo({
						src: tempFiles.path,
						success: (image) => {
							// 把arraybuffer转成base64并拼接
							resolve(`data:image/${image.type};base64,${uni.arrayBufferToBase64(res.data)}`)
						},
						fail: (err) => {
							reject(err)
						}
					});
				}
				// //把arraybuffer转成base64并拼接
				else resolve(`data:${tempFiles.type};base64,${uni.arrayBufferToBase64(res.data)}`)
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

2、chooseImage + getFileSystemManager

微信小程序 字节跳动小程序 QQ小程序

功能限制主要在getFileSystemManager
uniapp图片转base64及JS各文件类型相互转换

getImg() {
	uni.chooseImage({
		success: async (res) => {
			let base64List = await Promise.all(res.tempFiles.map((item, index) => {
				return this.tempToBase64(item)
			}))
			console.log(base64List)
		}
	})
},
tempToBase64(tempFiles) {
	return new Promise((resolve, reject) => {
		uni.getFileSystemManager().readFile({
			filePath: tempFiles.path,
			encoding: 'base64',
			success: (res) => {
				// 避免获取不到文件类型
				if (!tempFiles.type) {
					uni.getImageInfo({
						src: tempFiles.path,
						success: (image) => {
							// 拼接成完整的base64
							resolve(`data:image/${image.type};base64,${res.data}`)
						},
						fail: (err) => {
							reject(err)
						}
					});
				} 
				// 拼接成完整的base64
				else resolve(`data:${tempFiles.type};base64,${res.data}`)

			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

3、chooseImage + FileReader

H5

功能限制主要在FileReader实例上

getImg() {
	uni.chooseImage({
		success: async (res) => {
			// 等待全部完成后再接收结果
			let base64List = await Promise.all(res.tempFiles.map((item, index) => {
				return this.tempToBase64(item)
			}))
		}
	})
},
tempToBase64(tempFiles) {
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		const reader = new FileReader();
		reader.readAsDataURL(tempFiles);
		reader.onload = () => resolve(reader.result);
		reader.onerror = (error) => reject(error);
	});
}

4、扩展-JS各文件类型相互转换

在 JavaScript 中的经常用到的二进制的格式有三种:

  • ArrayBuffer:用来表示通用的、固定长度的原始二进制数据缓冲区;
  • Blob:表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作;
  • File:特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。

原生js中文件处理通常使用FileReader。

  • FileReader对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容。

base64转换中通常会用到atob/btoa

  • atob对经过 base-64 编码的字符串进行解码。
  • btoa可以将一个二进制字符串编码为 Base64 编码的 ASCII 字符串。

4.1 File 转成 ArrayBuffer

function fileToArrayBuffer(file){
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		let reader = new FileReader();
		reader.readAsArrayBuffer(file);
		reader.onload = () => resolve(reader.result);
		reader.onerror = (error) => reject(error);
	});
}

4.2 File 转成 blob

File特殊类型的 Blob,通常不需要转换,需要转换时可以利用 FileReader 中转。

function fileToBlob(file) {
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		let reader = new FileReader();
		reader.readAsArrayBuffer(file);
		reader.onload = () => resolve(new Blob([reader.result]));
		reader.onerror = (error) => reject(error);
	});
}

4.3 File 转成 base64

function fileToBase64(file) {
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		const reader = new FileReader();
		reader.readAsDataURL(file);
		reader.onload = () => resolve(reader.result);
		reader.onerror = (error) => reject(error);
	});
}

4.4 ArrayBuffer 转成 blob

function arrayBufferToBlob(arraybuffer) {
	return new Blob([arraybuffer]);
}

4.5 ArrayBuffer 转成 File

function arrayBufferToBlob(arraybuffer, filename = 'tempArrayBuffer') {
	new File([arraybuffer], filename )
}

4.6 Blob 转成 ArrayBuffer

function blobToArrayBuffer(blob) {
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		let reader = new FileReader();
		reader.readAsArrayBuffer(blob);
		reader.onload = () => resolve(reader.result);
		reader.onerror = (error) => reject(error);
	});
}

4.7 Blob 转成 File

File特殊类型的 Blob,通常不需要转换,需要转换时可以利用 FileReader 中转。文章来源地址https://www.toymoban.com/news/detail-482750.html

function blobToFile(blob, filename = 'tempBlob') {
	return new Promise((resolve, reject) => {
		///专门用来读文件的工具类
		let reader = new FileReader();
		reader.readAsArrayBuffer(blob);
		reader.onload = () => resolve(new File([reader.result], filename ))
		reader.onerror = (error) => reject(error);
	});
}

4.8 base64 转成 Blob

function base64toBlob(base64) {
	let arr = base64.split(',');
	let bstr = atob(arr[1]);
	let n = bstr.length;;
	let u8arr = new Uint8Array(n);
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new Blob([u8arr], {
		type: arr[0].match(/:(.*?);/)[1]
	});
},

4.9 base64 转成 File

function base64toFile(base64, filename = 'file') {
	let mime = arr[0].match(/:(.*?);/)[1];
	// suffix是该文件的后缀
	let suffix = mime.split('/')[1];
	// atob 对经过 base-64 编码的字符串进行解码
	let bstr = atob(base64.split(',')[1]);
	// n 是解码后的长度
	let n = bstr.length;
	// Uint8Array 数组类型表示一个 8 位无符号整型数组 初始值都是 数子0
	let u8arr = new Uint8Array(n);
	// charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	// new File返回File对象 第一个参数是 ArraryBuffer 或 Bolb 或Arrary 第二个参数是文件名
	// 第三个参数是 要放到文件中的内容的 MIME 类型
	return new File([u8arr], `${filename}.${suffix}`, {
		type: mime,
	});
},

4.10 base64 转成 ArrayBuffer

function base64ToArrayBuffer(base64){
   let text = new TextEncoder()
   return text.encode(btoa(base64))
} 

到了这里,关于uniapp图片转base64及JS各文件类型相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js实现base64,url,blob之间的相互转换

    一般来说前端展示图片会通过三种方式: url、base64、blob 1.url: 一般来说,图片的显示还是建议使用url的方式比较好。 2.base64: 如果图片较大,图片的色彩层次比较丰富,则不适合使用这种方式,因为其Base64编码后的字符串非常大,会明显增大HTML页面,影响加载速度。如果图

    2023年04月27日
    浏览(42)
  • 微信小程序uni-app图片和base64相互转换

    以上代码仅供参考,具体实现细节和样式可以根据需求自行调整。 需要完整源码的朋友,希望你能点赞+收藏+评论,然后私信我即可~ 如果教程中有不懂的地方,可添加学习会员小助手咨询(微信:mifankeji77)

    2024年02月14日
    浏览(34)
  • js实现base64、url和blob之间相互转换的三种方式

    Blob对象表示一个不可变、原始数据的类文件对象,Blob表示的不一定是JavaScript原生格式的数据,下面这篇文章主要给大家介绍了关于js实现base64、url和blob之间相互转换的三种方式 url 转 base64 Blob 转 url Blob 转 base64 base64 转Blob base64 转 url 一般来说前端展示图片会通过三种方式:

    2024年02月03日
    浏览(37)
  • 【js】js前端技巧之图片格式转换(File、Blob、base64):

    一、类型简介 BLOB(binary large object) : 二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 属性名称 读/写 描述 size 只读 Blob 对象中所包含数据的大小(字节)。 type 只读 一个字符串,表明该Blob对象所包含数据

    2024年02月07日
    浏览(38)
  • 前端将base64图片转换成file文件

    1、base64转成file具体代码 文件转换过程: 2、代码解析 ​ 该方法涉及知识点较多,首先因为base64的前缀信息部分与文件内容部分是通过 , 进行连接的, data:image/***;base64(前缀信息),xxxxx(文件内容) ,所以利用 split() 方法对base64进行分割,将前缀文件信息,与文件内容分隔开。得

    2024年01月20日
    浏览(39)
  • blob 和 base64 相互转换

    1. 方法 2. 使用方法 1. 方法 2. 使用方法

    2024年02月19日
    浏览(31)
  • js - 图片base64转file文件的两种方式

    最近项目中需要实现把图片的base64编码转成file文件的功能,然后再上传至服务器。 1.通过new File()将base64转换成file文件,此方式需考虑浏览器兼容问题 2.先将base64转换成blob,再将blob转换成file文件,此方法不存在浏览器不兼容问题 vue中配合vant的uploader上传组件使用案例: 打

    2024年02月14日
    浏览(36)
  • uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件

     uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件 index.vue,复制运行此代码看效果,支持Android、iOS 参考文档: 1、uniapp中拿到base64转blob对象,或base64转bytes字节数组,io操作写入字节流文件bytes 2、录音文件与Base64编码相互转换的方法 3、关于base64保存为文件 4、

    2024年02月11日
    浏览(45)
  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址 app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id=13926

    2024年02月13日
    浏览(36)
  • JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)

    FileReader.readAsArrayBuffer() - Web API 接口参考 | MDN FileReader 接口提供的 readAsArrayBuffer() 方法用于启动读取指定的 Blob 或 File 内容。当读取操作完成时,readyState 变成 DONE(已完成),并触发 loadend 事件,同时 result 属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据。 https://

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包