首页 > 编程语言 >JavaScript 将base64 转换为File

JavaScript 将base64 转换为File

时间:2023-01-10 18:23:00浏览次数:39  
标签:JavaScript 转换 对象 base64 Blob File 使用

在 JavaScript 中,可以使用 Blob 对象将 base64 字符串转换为 File 对象。

 

方法一(推荐,但存在兼容性问题):

首先, 你需要从 base64 字符串中获取文件类型, 然后将文件类型和 base64 字符串转换为 Blob 对象。最后, 使用 Blob 对象构造函数创建一个 File 对象。

下面是一个示例函数,它接收一个 base64 字符串和文件名,并返回一个 File 对象:

function base64ToFile(base64, fileName) {
    let arr = base64.split(',');
    let mime = arr[0].match(/:(.*?);/)[1];
    let bstr = atob(arr[1]);
    let n = bstr.length;
    let u8arr = new Uint8Array(n);

    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], fileName, {type: mime});
}

需要注意的是, atobUint8Array 是在所有现代浏览器中都可用的。在旧浏览器中,需要使用其它库来替代这两个函数。

如果您需要在使用这个函数之前检查文件类型是否支持,可以在函数中增加文件类型校验的代码。

 

方法二(由方法一分两步实现,存在兼容性问题):

在 JavaScript 中,可以使用 Blob 对象将 base64 字符串转换为二进制数据对象 (Blob)。

首先,使用 atob() 函数将 base64 字符串解码为二进制字符串。然后,使用 Uint8Array 构造函数将二进制字符串转换为字节数组。最后,使用 Blob 构造函数,将字节数组作为第一个参数,创建一个新的 Blob 对象。

 

先将base64转换为 Blob

// 将base64 转换为Blob
function base64ToBlob(base64) {
	var arr = base64.split(','),
		mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]),
		n = bstr.length,
		u8arr = new Uint8Array(n);
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new Blob([u8arr], {
		type: mime
	});
}

使用类似这样的方式构造出来的 Blob 对象就可以按照二进制文件的方式来使用,可以作为参数传入 FileReader, 通过 FormData 对象上传到服务器等。

需要注意的是, atobUint8Array 是在所有现代浏览器中都可用的。在旧浏览器中,需要使用其它库来替代这两个函数。

如果您需要在使用这个函数之前检查文件类型是否支持,可以在函数中增加文件类型校验的代码。

 

另外,在HTML5中,可以使用 canvas 元素的 toBlob()方法 将图片转换为 Blob 对象,这个方法是基于 HTMLCanvasElement 元素的, 你可以将一张图片转成base64后,再使用 canvas 的方法将图片绘制在 canvas 元素上,然后使用 toBlob() 方法获取到 Blob 对象。

还有一些第三方库,比如 FileSaver.js, 你可以使用它来将 Blob 对象保存在本地。

这些方法都能达到相同的目的,你可以根据项目中使用的 JavaScript 环境和需要的复杂度来进行选择

 

在 JavaScript 中,可以使用 File 构造函数将一个 Blob 对象转换为一个 File 对象。

这个构造函数接收两个参数: 第一个参数是一个 Blob 或者 ArrayBuffer 对象,第二个参数是文件的名字。

再将Blob转换为 File

function blobToFile(blob, fileName) {
    return new File([blob], fileName);
}

由于Blob是File的超集, 所以可以直接将Blob对象转换为File对象, 这样就可以使用File对象的各种方法,例如获取文件名、类型等。

由于这个是新的API, 可能在部分浏览器上不能使用, 也可以使用第三方库来兼容在旧浏览器上使用。

 

标签:JavaScript,转换,对象,base64,Blob,File,使用
From: https://www.cnblogs.com/yuzhihui/p/17041062.html

相关文章

  • JavaScript 中URL 查询字符串(query string)的序列与反序列化
    方法一:在JavaScript中,可以使用URLSearchParams对象来处理URL中的查询字符串。序列化(将JavaScript对象转换为查询字符串)可以使用URLSearchParams对象的append(......
  • JavaScript 计算base64编码图片大小
    JavaScript可以通过获取图片的base64编码并计算其大小来计算图片大小。方法一://计算base64编码图片大小functiongetBase64ImageSize(base64){ if(base64){ b......
  • cdc-file-transfer 使用说明
    cdc-file-transfer主要是场景是windows到linux主机的数据同步,包含了stream以及rsync两大工具使用注意事项首次执行会进行servercopy,但是目前有点问题,如下,通过测试......
  • jenkins执行Build Now报错系列(一)generated for lockfileVersion@2
    控制台报错如下: 主要是因为npm内的版本是lockfileVersion@1的,但是项目中用的是lockfileversion@2,因此需要升级npm,升级语句是npminstall-gnpm。我这边的npm是通过选......
  • Flashdevelop解决ANE报Not supported native extensions profile
    ​ 报 Not supported native extensions profile  解决办法: 修改application.xml文件原<​​​​supportedProfiles​​​​>desktopextende......
  • JavaScript中的闭包
    JavaScript中的闭包是一种特殊的函数,它可以访问其定义时所在的作用域中的变量,即使在这个作用域已经不存在的情况下。闭包的一个常见用途是构建私有变量。当你使用闭包封装......
  • JavaScript 浅拷贝和深拷贝
    JavaScript中的拷贝分为两种:浅拷贝和深拷贝。浅拷贝是指在拷贝过程中,只拷贝一个对象中的指针,而不拷贝实际的数据。所以,浅拷贝中修改新对象中的数据时,原对象中的数据也会......
  • javascript中无限分类递归树
    摘抄:https://www.cnblogs.com/silfox/p/11411680.html(原文)列表转换成树形结构方法定义:1//javascript树形结构2functiontoTree(data){3//删除所有chi......
  • cdc-file-transfer 谷歌开源的windows 到linux 同步工具
    cdc-file-transfer是基于contentdefinedchunking以及fastcdc技术,cdc-file-transfer目前提供了两种工具cdc_rsync类似rsync的同步能力,进行文件拷贝,但是性能相比rsyn......
  • Makefile
    简单示例src=$(wildcard./*.c)objs=$(patsubst%.c,%.o,$(src))target=app$(target):$(objs)$(CC)$^-o$@%.o:%.c$(CC)-c$<[email protected]:clea......