JS中将图片base64转file文件的两种方式

将图片base64转换成file文件可以使用两种方式:Blob对象和FormData对象。

使用Blob对象

我们可以使用Blob对象来创建一个File对象。File对象是对Blob对象的一个扩展。该方法包含以下步骤:

  1. 将Base64字符串转换为Uint8Array数组
  2. 使用Blob对象创建File对象

以下是实现的代码:

/**
 * 将图片的base64字符串转换成File对象
 * @param {string} base64 - base64字符串
 * @param {string} filename - 文件名
 * @return {File} file对象
 */
function dataURLtoFile(base64, filename) {
    const arr = base64.split(',');
    const typeMatch = arr[0].match(/:(.*?);/);
    const mime = typeMatch[1];
    const bstr = atob(arr[1]);
    let n = bstr.length;
    const u8arr = new Uint8Array(n);
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, { type: mime });
}

使用示例:

const base64 = 'data:image/png;base64,iVBORw0KGg......';
const file = dataURLtoFile(base64, 'example.png');
console.log(file);

使用FormData对象

我们可以使用FormData对象来将Base64字符串转换为File对象。FormData对象包含一个用于添加key-value数据的append方法。该方法第二个参数是用于表示文件数据的File对象,第三个参数是表示文件名的字符串。

以下是使用FormData对象实现的代码:

/**
 * 使用FormData将图片的base64字符串转换成File对象
 * @param {string} base64 - base64字符串
 * @param {string} filename - 文件名
 * @return {File} file对象
 */
function dataURLtoFileWithFormData(base64, filename) {
    const arr = base64.split(',');
    const typeMatch = arr[0].match(/:(.*?);/);
    const mime = typeMatch[1];

    const formData = new FormData();
    formData.append('file', dataURItoBlob(base64), filename);

    return formData.get('file');
}

/**
 * 将base64转换为Blob
 * @param {string} base64 - base64字符串
 * @return {Blob} Blob对象
 */
function dataURItoBlob(dataURI) {
    const byteString = atob(dataURI.split(',')[1]);
    const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    const ab = new ArrayBuffer(byteString.length);
    const ia = new Uint8Array(ab);
    for (let i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ab], { type: mimeString });
}

使用示例:

const base64 = 'data:image/png;base64,iVBORw0KGg......';
const file = dataURLtoFileWithFormData(base64, 'example.png');
console.log(file);

请注意,这两种方法都需要将Base64字符串转换为Blob对象。第二种方法使用FormData对象,其更受欢迎,因为他是一种用于构建表单数据的技术,更为简洁易懂。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中将图片base64转file文件的两种方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript 中的六种循环方法

    让我们来详细讲解 JavaScript 中的六种循环方法。 1. for 循环 for 循环是 JavaScript 中最常用的循环方法之一。它可以用来遍历数组、对象等。for 循环的语法格式如下: for (let i = 0; i < array.length; i++) { console.log(array[i]); } 上面的代码中,i 是循…

    JavaScript 2023年5月27日
    00
  • 解决JSON.stringify()自动将中文转译成unicode的问题

    要解决JSON.stringify()自动将中文转译成Unicode的问题,可以通过使用第三方库 json-bigint 或者自行编写转换函数来实现。 下面分别给出两种方法的使用示例: 使用json-bigint 安装 json-bigint: sh npm install json-bigint 在代码中引入json-bigint: javascript …

    JavaScript 2023年5月19日
    00
  • 使用requestAnimationFrame实现js动画性能好

    使用requestAnimationFrame实现js动画的优点是可以避免过多使用setTimeout或setInterval造成的页面卡顿、CPU过度占用等问题,从而保证动画的流畅度和性能。以下是具体操作步骤: 准备工作 首先需要在代码中声明一个全局变量 requestId 用于记录动画的请求ID。然后编写动画函数,此函数需要接收一个时间参数。 let r…

    JavaScript 2023年6月10日
    00
  • JS中位置与大小的获取方法

    当我们开发JavaScript程序时,经常需要获取页面元素的位置与大小,以便进行后续的操作。接下来,我将为大家介绍JS中获取元素位置与大小的方法。 获取元素位置 1. offsetTop和offsetLeft属性 offsetTop和offsetLeft是用来获取某个元素相对于其offsetParent元素(指具有定位属性的父元素)的左上角距离的。 cons…

    JavaScript 2023年6月10日
    00
  • canvas实现粒子时钟效果

    下面是“canvas实现粒子时钟效果”的完整攻略: 步骤一:设置画布 首先需要在HTML文件中添加一个canvas标签,并设置其宽高。如下面的示例代码所示: <canvas id="canvas" width="600" height="600"></canvas> 接着,在…

    JavaScript 2023年6月11日
    00
  • js实现日历的简单算法

    下面是“JavaScript实现日历的简单算法”的攻略。 确定日历的显示方式 在进行日历算法之前,我们需要先确定日历的显示方式。一般来说,常用的日历显示方式有两种,一种是以星期为单位的日历(也叫“周历”),另一种是以月份为单位的日历。其中,以月份为单位的日历是比较常见的一种,因此这里我们以月份为单位的日历为例进行讲解。 确定日历的数据结构 在进行日历算法之前…

    JavaScript 2023年5月27日
    00
  • 使用Javascript在HTML中显示实时时间

    下面是如何使用Javascript在HTML中显示实时时间的完整攻略: 1. 在HTML中创建一个用于显示时间的元素 首先,在HTML中创建一个<span>元素,用于显示实时时间。 <p>现在的时间是:<span id="time"></span>.</p> 在这里,我们使用了一…

    JavaScript 2023年5月27日
    00
  • js实现简单日历效果

    实现一个简单日历效果的方式有很多种,我这里介绍一种使用原生JavaScript实现的方法。 步骤一:HTML结构 首先,在HTML中创建一个包含日历的div,结构如下: <div id="calendar"> <div class="header"> <span class="l…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部