JS 图片base64与file_blob的相互转换的方法实现

 更新时间:2025年07月25日 11:13:53   作者:喜欢代码的新之助  
在开发中,经常会遇到需要将base64编码的图片转换为file文件格式用于上传的情况,下面就来介绍一下base64与file_blob的相互转换,感兴趣的可以了解一下

在开发中,经常会遇到需要将base64编码的图片转换为file文件格式用于上传的情况;图片base64编码转换为file格式过程中,思路:base64 --> Uint8Array --> new File()

具体实现方法如下,封装在文件xxx.js中,放置于项目文件夹utils下,开发中直接引入调用即可:

/**
 * Base64 转 File
 * @param base64 String base64格式字符串
 * @param filename String 文件名称或者文件路径
 * @param contentType String file对象的文件类型,如:"image/png"
 */
 export function base64ToFile(base64, filename, contentType){
     var arr = base64.split(',')  //去掉base64格式图片的头部
     var bstr = atob(arr[1])   //atob()方法将数据解码
     var leng = bstr.length
     var u8arr = new Uint8Array(leng)
     while(leng--){
        u8arr[leng] =  bstr.charCodeAt(leng) //返回指定位置的字符的 Unicode 编码
     }
     return new File([u8arr], filename, {type:contentType}) 
 }

/**
* Base64转Blob
* @param base64 String base64格式字符串
* @param contentType String blob对象的文件类型,如:"image/png"
*/
function base64ToBlob(base64, contentType){
	var arr = base64.split(',')  //去掉base64格式图片的头部
	var bstr = atob(arr[1])   //atob()方法将数据解码
	var leng = bstr.length
	var u8arr = new Uint8Array(leng)
	while(leng--){
		u8arr[leng] =  bstr.charCodeAt(leng) //返回指定位置的字符的 Unicode 编码
	}
	var blob = new Blob([u8arr],{type:contentType})
	var blobImg = {}
	blobImg.url = URL.createObjectURL(blob )  //创建URL,
	blobImg.name = new Date().getTime() + '.png'
	return blobImg
}

/**
 * File 转 Base64
 * @param file Object 文件对象流
 */
 export function fileToBase64(file){
	return new Promise((resolve) => {
		var reader = new FileReader()
		reader.readAsDataURL(file)  
		//读取后,result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件
		reader.onload = function(e){
			resolve(e.target.result)
		}
     })
 }

/**
* Blob 转 Base64
* @param blob Object blob对象
*/
export function blobToBase64(blob){
	return new Promise((resolve) => {
		var reader = new FileReader()
		reader.readAsDataURL(blob)  
		//读取后,result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件
		reader.onload = function(e){
			resolve(e.target.result)
		}
     })
}

使用:引入xxx.js文件,调用方法

// 注意引入路径不要出错
import { base64ToFile, base64ToBlob, fileToBase64, blobToBase64 } from '@/utils/xxx.js'

const file = base64ToFile(base64, 'picture', 'image/png')
// 输出File对象
console.log(file)

const blob = base64ToBlob(base64, 'image/png')
// 输出blob对象
console.log(blob)

fileToBase64(file).then(res => {
	// 输出图片base64
	console.log(res)
}).catch(err => {
	console.log(err)
})

blobToBase64(blob).then(res => {
	// 输出图片base64
	console.log(res)
}).catch(err => {
	console.log(err)
})

到此这篇关于JS 图片base64与file_blob的相互转换的方法实现的文章就介绍到这了,更多相关JS 图片base64与file_blob转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 小程序ios音频播放没声音问题的解决

    小程序ios音频播放没声音问题的解决

    这篇文章主要介绍了小程序ios音频播放没声音问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 文本框只能输入数字的实现方法(兼容IE火狐)

    文本框只能输入数字的实现方法(兼容IE火狐)

    下面小编就为大家带来一篇文本框只能输入数字的实现方法(兼容IE火狐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • JavaScript状态模式及适配器模式使用讲解

    JavaScript状态模式及适配器模式使用讲解

    这篇文章主要介绍了理解JavaScript中的状态模式及适配器模式,适配器模式即Adapter Pattern,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,下文更多相关介绍需要的小伙伴可以参考一下
    2022-12-12
  • javascript中AJAX用法实例分析

    javascript中AJAX用法实例分析

    这篇文章主要介绍了javascript中AJAX用法,实例分析了针对不同浏览器的Ajax使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • js添加元素的简单方式示例

    js添加元素的简单方式示例

    这篇文章主要给大家介绍了关于js添加元素的简单方式,文中通过代码示例将每种实现的方法都介绍的非常详细,对大家学习或者使用js具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • JavaScript中style.left与offsetLeft的使用及区别详解

    JavaScript中style.left与offsetLeft的使用及区别详解

    这篇文章主要介绍了JavaScript中style.left与offsetLeft的使用及区别详解的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JavaScript实现气球打字的小游戏

    JavaScript实现气球打字的小游戏

    这篇文章主要介绍了JavaScript实现气球打字的小游戏,下面文章的思路来源于打字游戏,具体实现过程,需要的朋友可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • JavaScript中Array.map()的使用与技巧分享(附实际应用代码)

    JavaScript中Array.map()的使用与技巧分享(附实际应用代码)

    Array.map()适合需要返回新数组、进行链式调用或不修改原数组的场景,它与forEach()的区别在于有返回值,基本语法中,callback函数处理每个元素并返回新值,本文介绍了JavaScript中Array.map()的使用与技巧分享(附实际应用代码),需要的朋友可以参考下
    2025-02-02
  • JavaScript的模块化:封装(闭包),继承(原型) 介绍

    JavaScript的模块化:封装(闭包),继承(原型) 介绍

    在复杂的逻辑下, JavaScript 需要被模块化,模块需要封装起来,只留下供外界调用的接口。闭包是 JavaScript 中实现模块封装的关键,也是很多初学者难以理解的要点
    2013-07-07
  • js深度合并两个数组对象的实现

    js深度合并两个数组对象的实现

    这篇文章主要介绍了js深度合并两个数组对象的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论