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

yizhihongxing

将图片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 2023年5月28日
    00
  • js解析与序列化json数据(三)json的解析探讨

    JS解析与序列化JSON数据 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。JSON是JavaScript原生支持的格式之一,可以通过JavaScript中内置的 JSON 对象直接进行解析和生成。 本文将主要讨论如何解析和序列化 JSON 数据,涉及的主要内容…

    JavaScript 2023年5月27日
    00
  • JavaScript中英文字符长度统计方法示例【按照中文占2个字符】

    当统计JavaScript字符串长度时,需要注意中文和英文字符的不同处理方式,因为中文字符在Unicode编码中占两个字符的位置,而英文字符只占一个字符位置。 下面介绍几种方法来实现JavaScript中英文字符长度的统计。 方法一:正则表达式 使用正则表达式对中英文字符进行匹配,累加中文字符的个数,即可得到该字符串的长度。 function length(…

    JavaScript 2023年5月28日
    00
  • javascript动画之圆形运动,环绕鼠标运动作小球

    JavaScript动画之圆形运动 在JavaScript中,通过使用CSS3的transform属性或canvas绘图API,可以实现圆形运动效果。接下来,我们以transform属性为例进行详细讲解。 示例1:物体沿圆形路径运动 首先,需要准备一个容器和一个要运动的物体。将其设置为圆形,如下所示: <div id="container&q…

    JavaScript 2023年6月10日
    00
  • js如何判断用户是在PC端和还是移动端访问

    判断用户是在PC端还是移动端访问是前端开发中常用的操作,这个操作可以给不同平台的用户提供不同的服务。 以下是一些方法来判断用户是在PC端还是移动端访问,其中包括使用用户代理字符串(User-Agent String)、媒体查询等不同的方式。 方法一:使用User-Agent字符串 通过检查浏览器的User-Agent字符串来判断用户是在PC端还是移动端访问。…

    JavaScript 2023年6月11日
    00
  • js中根据字数截取字符串,不能截断url

    根据你的要求,我将详细讲解“JS中根据字数截取字符串,不能截断URL”问题的解决方案。 问题描述 在web开发中,我们可能会遇到这样的场景:需要在显示文本时截取字符串,限制其最大字数,但是需要保留其中的url地址,也就是说,不能简单的按照字符数截断字符串,而是需要在url出现的位置进行裁剪。例如: 原文本:This is an example of a lo…

    JavaScript 2023年5月28日
    00
  • js如何根据id删除数组中对象

    首先,要根据id删除数组中的对象,我们需要对该数组进行遍历,并找到该对象所在的索引位置。接下来,我们可以使用splice()函数删除该位置的对象。 具体步骤如下: 定义一个数组,包含多个对象,每个对象都有一个id属性。 let arr = [ {id: 1, name: ‘Tom’}, {id: 2, name: ‘Jerry’}, {id: 3, name…

    JavaScript 2023年6月11日
    00
  • 用js计算页面执行时间的函数

    首先,在计算页面执行时间之前,需要先记录页面开始加载的时间和页面加载完成的时间。我们可以使用window对象的performance属性来实现。 页面开始加载的时间: const loadStartTime = window.performance.timing.navigationStart; 页面加载完成的时间: window.onload = func…

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