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日

相关文章

  • js构造函数、索引数组和属性的实现方式和使用

    下面详细讲解 “js构造函数、索引数组和属性的实现方式和使用” 的完整攻略: 构造函数的实现方式和使用 构造函数是一种特殊的函数,可以用来创建 JavaScript 对象。构造函数通过 new 关键字来调用,从而创建一个新的对象。构造函数的名称通常以大写字母开头,以区分普通函数。下面是构造函数的基本语法: function Person(name, age)…

    JavaScript 2023年5月27日
    00
  • 浅谈js键盘事件全面控制

    以下是浅谈js键盘事件全面控制的完整攻略。 1. 键盘事件简介 键盘事件是指当用户在页面上敲击键盘时发生的事件,常见的键盘事件有keydown、keypress和keyup,分别代表按下键盘、按下并松开键盘以及松开键盘三种状态。通过监听这些事件,我们可以实现很多常用交互效果,比如快捷键操作、按键响应等等。 下面我们通过一个简单的示例来说明键盘事件的基本应用。…

    JavaScript 2023年6月11日
    00
  • JavaScript实现网页计算器功能

    JavaScript是现代网页开发中不可或缺的语言,可以用来实现网页计算器功能。以下是实现网页计算器功能的完整攻略,包含两条示例说明: 1. 创建网页结构 在HTML页面中创建一个计算器界面。可以使用<div>元素来包含计算器所有内容。 在这个<div>元素中,可以创建多个<button>元素,每个<button&g…

    JavaScript 2023年6月11日
    00
  • JS基于正则截取替换特定字符之间字符串操作示例

    下面是详细的攻略: 什么是基于正则截取替换特定字符之间字符串操作? 基于正则截取替换特定字符之间字符串操作是指使用JS正则表达式来寻找一对特定字符之间的字符串,并对其进行截取或替换的操作。 实现步骤 第一步:定义正则表达式 我们需要使用JS正则表达式来匹配寻找特定的字符。 例如我们要寻找“{{”和“}}”之间的字符串,可以定义如下正则表达式: /{{.*?}…

    JavaScript 2023年5月28日
    00
  • JS实现匀速与减速缓慢运动的动画效果封装示例

    下面我将详细讲解如何实现 JS 实现匀速与减速缓慢运动的动画效果封装。 1. 匀速缓动动画 步骤如下: 获取元素的起始位置和目标位置 计算元素移动的距离和移动的总时间 每个时间间隔移动元素的距离 将元素移动到目标位置 示例代码: /** * @param {HTMLElement} el * @param {number} target * @param {…

    JavaScript 2023年6月10日
    00
  • ASP动态生成的javascript表单验证代码

    下面是ASP动态生成的javascript表单验证代码的完整攻略。 什么是ASP动态生成的javascript表单验证代码? ASP动态生成的javascript表单验证代码是在ASP程序中使用javascript代码来验证用户提交的表单数据,它可以确保用户提交的数据格式符合要求,从而排除了很多不合规的数据,提高了网站的安全性和稳定性。 如何实现ASP动态生…

    JavaScript 2023年6月10日
    00
  • js实现左右轮播图

    下面我将为您讲解如何用Javascript实现左右轮播图。 什么是轮播图? 轮播图是一种视觉效果,用于网站或应用程序中的图片或内容展示。它通常是横向或纵向排列的一组图像,以便用户可以滚动以查看更多内容。 实现方法 1. HTML结构 首先,我们需要创建一个HTML结构,用于保存轮播图的图片,以下是一个简单的示例: <div class="sl…

    JavaScript 2023年6月11日
    00
  • 原生js实现无限循环轮播图效果

    原生JS实现无限循环轮播图的步骤如下: 定义样式和HTML结构 先定义轮播图的样式和HTML结构,可以用一个ul包含多个li标签,每个li标签里放置一张图片。 <div> <ul class="slider"> <li><img src="image1.jpg" alt=&qu…

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