K9 Finance中文网 首页 THETA中文网

领取MOLI红包
你的位置: K9 Finance中文网 > THETA中文网 >

浅析js中base64与file的转换

发布日期:2025-01-03 18:18    点击次数:96
背景 最近项目中需要实现把图片的 base64 编码转成 file 文件的功能,然后再上传至服务器。起初是直接通过new File()的方式进行转换,在各个主流的浏览器基本上都支持,Android也没问题,但是在ios系统埋了个坑,ios11.4以下的系统上传失败。定位bug发现是new File()这个方法不兼容ios系统,只能另辟蹊径,最后找到本篇文章的第二种方法 一、base64转为file 在 js中,可以使用 Blob 对象将 base64 字符串转换为 File 对象。 方法一、base64 直接转换为 File 对象: 首先, 需要从 base64 字符串中获取文件类型, 然后将文件类型和 base64 字符串转换为 Blob 对象。最后, 使用 Blob 对象构造函数创建一个 File 对象。 下面是一个示例函数,它接收一个 base64 字符串和文件名,并返回一个 File 对象: 需要注意的是, atob 和 Uint8Array 是在所有现代浏览器中都可用的。在旧浏览器中,需要使用其它库来替代这两个函数。 如果需要在使用这个函数之前检查文件类型是否支持,可以在函数中增加文件类型校验的代码。 方法二、base64 先转换为 Blob,再由 Blob 转换为 File: 在 JavaScript 中,可以使用 Blob 对象将 base64 字符串转换为二进制数据对象 Blob。 首先,使用 atob() 函数将 base64 字符串解码为二进制字符串。然后,使用 Uint8Array 构造函数将二进制字符串转换为字节数组。最后,使用 Blob 构造函数,将字节数组作为第一个参数,创建一个新的 Blob 对象。 1、先将 base64 转换为 Blob: 使用类似这样的方式构造出来的 Blob 对象就可以按照二进制文件的方式来使用,可以作为参数传入 FileReader, 通过 FormData 对象上传到服务器等。 需要注意的是, atob 和 Uint8Array 是在所有现代浏览器中都可用的。在旧浏览器中,需要使用其它库来替代这两个函数。 如果需要在使用这个函数之前检查文件类型是否支持,可以在函数中增加文件类型校验的代码。 另外,在 HTML5 中,可以使用 canvas 元素的 toBlob()方法 将图片转换为 Blob 对象,这个方法是基于 HTMLCanvasElement 元素的, 可以将一张图片转成 base64 后,再使用 canvas 的方法将图片绘制在 canvas 元素上,然后使用 toBlob() 方法获取到 Blob 对象。 还有一些第三方库,比如 FileSaver.js, 可以使用它来将 Blob 对象保存在本地。 这些方法都能达到相同的目的,可以根据项目中使用的 JavaScript 环境和需要的复杂度来进行选择 在 JavaScript 中,可以使用 File 构造函数将一个 Blob 对象转换为一个 File 对象。 这个构造函数接收两个参数: 第一个参数是一个 Blob 或者 ArrayBuffer 对象,第二个参数是文件的名字。 2、再将 Blob 转换为 File: 由于 Blob 是 File 的超集, 所以可以直接将 Blob 对象转换为 File 对象, 这样就可以使用 File 对象的各种方法,例如获取文件名、类型等。 由于这个是新的 API, 可能在部分浏览器上不能使用, 也可以使用第三方库来兼容在旧浏览器上使用。 二、File => base64 方法一、File 直接转换为 base64: 使用 FileReader 对象将 File 对象转换为 base64 编码的字符串。以下是一个简单的 JavaScript 代码示例: 方法二、File 先转换为 Blob,再由 Blob 转换为 base64: 1、先将 File 转换为 Blob: File 对象本身就是一种特殊类型的 Blob 对象,因此将 File 转换为 Blob 可以直接使用 File 对象。 如果需要将 Blob 对象转换为另一种 Blob 对象,可以使用 Blob 构造函数,将原始 Blob 对象作为参数传递,然后使用新构造出来的 Blob 对象进行操作。以下是一个将 File 对象转换为 Blob 对象的示例代码: 2、再将 Blob 转换为 base64: 可以使用 FileReader 对象读取 Blob 数据并转换为 DataURL。Data URL 是一种基于 Base64 编码的 URL 方案,可以用于在网页中嵌入图片或其他资源。 以下是一个将 Blob 对象转换为 base64 字符串的示例代码: 上述代码中的 blobToBase64 函数接收一个 Blob 对象作为参数,并返回一个 Promise 对象,该 Promise 对象最终返回一个 base64 字符串。在函数内部,创建了一个 FileReader 对象,并调用其 readAsDataURL 方法将 Blob 对象读取为 DataURL。在读取完成后,我们使用 Promise 对象的 resolve 方法将 DataURL 中的 base64 字符串提取出来并返回。如果读取过程中出现错误,则使用 reject 方法拒绝 Promise 对象。 到此这篇关于浅析js中base64与file的转换的文章就介绍到这了,更多相关js base64与file转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

----------------------------------
栏目分类
相关资讯
  • FEG 过渡到币安智能链 (BSC)

    $FEG 过渡到币安智能链 (BSC)---● 我们正在做什么以及为什么FEG 生态系统正在完全过渡到币安智能链 (BSC),以简化运营并加强我们的基础。管理多...

  • 当无人机连上APP:手机操控飞机 一键完成起飞

    最近两年来,随着物联网概念的深入和各类传感器技术的进步,无人机从之前只服务于政府或航模圈内少数群体,逐渐走向了大众视野,甚至成为普通人都能拥有的智能产品。 可就...

  • MOLI万站,正式上线

    MOLI万站,正式上线...

  • win10桌面图标不见了右键无反应

    很多小伙伴打开电脑的时候发现桌面图标不见了,点击右键也没有反应,这个时候不要慌,只需要在桌面上按下“Shift+F10”,这时候在桌面左上角会弹出右键菜单,在查...

  • 隔夜SHIBOR上涨6.30个基点 7天期下降2.90个基点

    转自:金融界本文源自:观点网观点网讯:6月7日,中国货币市场利率出现波动。隔夜SHIBOR(上海银行间同业拆放利率)报1.7190%,较前一交易日上涨6.30个...

  • 三个进化点,FVR2.0颠覆你对线下VR体验的想象

    12月8日,FVR2.0线下首店在上海虹口凯德商业中心正式开业!这一次,为了能给玩家们提供更出色的全新虚拟现实体验,FVR携手左目互娱、幻身科技等国内一线VR内...