前端FileReader对象实现图片file文件转base64

news2024/9/22 15:31:59

1、file转base64具体代码

// 图片file转base64方法(file文件,回调函数)
  fileToBase64(file, callback) {
    // 创建FileReader对象(不兼容IE)
    let reader = new FileReader();
    // 将file转为base64 (异步操作)
    reader.readAsDataURL(file); 
    // 转换成功
    reader.onload = () => {
      const response = {
        status: true,
        data: reader.result
      }
      callback(response);
    };
    // 转换失败
    reader.onerror = function () {
      const response = {
        status: false,
        data: reader.error
      }
      callback(response);
    };
  }

// 调用方法
fileToBase64(imgFile, (res) => {
  if(res.status) {
    console.log('file转化成base64成功---',res.data)
  } else {
    console.log('file转化base64失败---',res.data)
  }
})

2、原理解析

​ 上面封装的方法,其原理主要是借助FileReader对象来实现图片格式的转换,FileReader对象中的readAsDataURL()方法,可以读取一个FileBlob类型的文件,并将其转换为base64格式的字符串。但要注意的一点是:我们通过readAsDataURL()方法去读取一个文件时,属于异步操作,因此我们需要在FileReader对象的onload事件或onerror事件中,通过回调函数的方式,将文件类型转换的结果,传递给方法的调用者。

​ 还有最重要的一点:该方法不兼容IE。

3、FileReader对象

FileReader对象可以异步的读取用户计算机上文件,但仅限于以安全的方式(通过<input>DataTransfer等方式获取文件后),读取对应的FileBlob类型的文件,并不能按照文件路径去用户的存储的读取对应文件。

浏览器兼容性:

在这里插入图片描述

① 创建FileReader对象的方法只有一种,那就是构造函数:
// 创建FileReader对象
let reader = new FileReader();
② 常用属性

error:表示当读取文件发生错误时,返回的错误信息。

readyState:表示目前FileReader对象的状态,值有三个:0—未读取任何数据、1—正在读取数据、2—数据读取完成或被终止。

result:表示文件读取并转换格式后的结果,结果的格式取决于使用的读取方法。

③ 对象事件

onload:该事件在读取操作完成时触发,此时可以通过reader.result拿到文件读取并转换格式后的结果。

onerror:该事件在读取操作才发生错误时触发此时可以通过reader.error拿到对应的错误信息。

onabort:该事件在读取操作被中断时触发。

④ 常用方法

readAsDataURL(file):读取一个file或Blob文件,并将其转换为base64格式,存储在reader.result

readAsArrayBuffer(file):读取一个file或Blob文件,并将其转换为ArrayBuffer格式,存储在reader.result

readAsText(file[,encoding]):读取一个file或Blob文件,并将其按照第二个参数设置的编码类型转换为字符串格式(默认为UTF-8格式),存储在reader.result

abort():终止正在进行的读取操作。

4、相关文档

FileReader
前端借助Canvas实现压缩图片两种方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何正确选择好用的投票平台微信公众平台投票链接链接投票平台

“年度人物楷模”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发…

driver.js web 新手交互引导工具库

前言 最近逛技术论坛发现了 driver.js 这个库&#xff0c;相信很多人在app中都碰到过功能引导的&#xff0c;这个库就可以用来做这个功能。web段项目很少见到功能引导的&#xff0c;但是用在uniapp 、浏览器插件 中感觉还是十分不错的&#xff0c;因此打算来简单学习一下&…

js 防抖函数 节流函数

某些事件中(如 onresize onscroll onkeydown onkeyup onmousemove …)&#xff0c;会连续触发函数的执行&#xff0c;如果函数执行一些耗时的操作(如请求数据…)&#xff0c;会影响性能&#xff0c;也有可能造成服务器压力。这时可以用 防抖函数 或 节流函数解决这种问题。 防…

分布式环境下的服务器时钟同步问题解决办法

一、分布式集群场景下时钟不同步会有什么问题&#xff1f; 如上面的示意图所示&#xff0c;分布式集群场景下如果各个服务器时间不一致&#xff0c;可能导致同一时间产生的数据&#xff0c;在处理过程中和数据库中&#xff0c;保存成了不同的时间&#xff0c;造成数据混乱。 …

大数据之Phoenix环境搭建

文章目录前言一、下载Phoenix安装包二、上传并解压三、拷贝服务包到各个hbase的lib目录下四、修改hbase的配置文件五、重启HBase集群六、连接Phoenix客户端前言 #博学谷IT学习技术支持# 本篇文章主要介绍Phoenix的环境搭建&#xff0c;Phoenix支持使用SQL语句操作HBase&#x…

JavaWeb6-线程常用方法

目录 1.线程等待join&#xff08;共有3个方法重载&#xff09; 1.1.public void join() 1.2.public void join(long millis) 2.线程终止 2.1.通过自定义标记符来中断&#xff08;常用&#xff09; 2.2.调用 interrupt() 方法来中断&#xff08;常用&#xff0c;最推荐使用…

Ubuntu安装落雪音乐LX Music

网址&#xff1a; https://lxmusic.toside.cn/ 以 .deb 结尾的文件为在 Linux 系统上运行的版本&#xff0c;软件还有 .rpm/AppImage/pacman 格式的 Linux 包&#xff0c;但没有上传到网盘&#xff0c;可自行到项目发布页面下载。 在Ubuntu上安装比较简单。 安装成功 打开音乐…

maven多环境配置

maven多环境配置 参考网址: https://mp.weixin.qq.com/s/-e74bd2wW_RLx7i4YF5M2w https://mp.weixin.qq.com/s/3p53kBHqys58QdMme6lR4A 项目地址 https://gitee.com/shao_ming314/maven-profile-dir 项目说明 该项目基于目录进行多环境配置 , 具体的配置文件在 src/resource…

【Opencv--自适应图像二值化】cv2.adaptiveThreshold()

【Opencv–adaptiveThreshold】自适应阈值图像二值化 文章目录【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明3. 代码示例4. 效果4.1 原图&#xff08;ori.img&#xff09;4.2 处理后5. 参考1. 介绍 在这里 cv2.…

ArcGIS Enterprise on Kubernetes 11.0安装示例

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录安装前置条件基本安装解压文件生成秘钥执行安装脚本配置DNS方法一方法二…

快速上手:Prometheus和Grafana入门教程

目录一、简介二、安装Prometheus2.1 二进制安装2.2 添加到system服务2.3 访问UI三、安装Granfa3.1 Docker部署Mysql3.2 Docker部署Grafana3.3 访问UI3.4 添加Prometheus为数据源四、安装Exporter收集数据4.1 node_exporter 服务器监控下载解压启动node_exporter服务与整合Prome…

聚类-理论补充2

目录 一。拉普拉斯矩阵的定义 二。谱聚类算法&#xff1a;未正则拉普拉斯矩阵 三。谱聚类算法&#xff1a;随机游走拉普拉斯矩阵 四。谱聚类算法&#xff1a;对称拉普拉斯矩阵 五。进一步思考 六。随机游走和拉普拉斯矩阵的关系 七。标签传递算法 一。拉普拉斯矩阵的定义 …

MySQL(六)

查询优化 在编写快速的查询之前&#xff0c;需要清楚一点&#xff0c;真正重要的是响应时间&#xff0c;而且要知道在整个SQL语句的执行过程中每个步骤都花费了多长时间&#xff0c;要知道哪些步骤是拖垮执行效率的关键步骤&#xff0c;想要做到这点&#xff0c;必须要知道查询…

Qt之调色板类QPalette的使用

文章目录QPalette调色板类前言代码知识点讲解QPalette调色板类 前言 Qt提供的调色板类QPalette专门用于管理部件的外观显示&#xff0c;相当于部件或对话框的调色板&#xff0c;管理他们所有的颜色信息。每个部件都包含一个QPalette对象&#xff0c;在显示时&#xff0c;按照…

OnGUI Color 控件||Unity 3D GUI 简介||OnGUI TextField 控件

Unity 3D Color 控件与 Background Color 控件类似&#xff0c;都是渲染 GUI 颜色的&#xff0c;但是两者不同的是 Color 不但会渲染 GUI 的背景颜色&#xff0c;同时还会影响 GUI.Text 的颜色。具体使用时&#xff0c;要作如下定义&#xff1a;public static var color:Color;…

Go 管道关闭引发的探索

前言 在日常开发中, 经常会使用chan来进行协程之间的通信. 对chan的操作也无外乎读写关. 而本次, 就是从chan的关闭而来. 假设我们对外提供的方法如下: type Chan struct {ch chan int }func (c *Chan) Close() {close(c.ch) }func (c *Chan) Send(v int) {c.ch <- v }那…

Qt 工程师进阶技术23种设计模式

Qt 工程师进阶技术23种设计模式【1】23种设计模式【1】23种设计模式 设计模式是解决特定问题的一系列套路&#xff0c;这套方案提高代码可复用性、可读性、稳健性、可维护性及安全性。 23种设计模式可分为三类:结构型模式(侧重类与对象之间的组合)、行为型模式&#xff08;侧重…

day47【代码随想录】动态规划之买卖股票的最佳时机III、买卖股票的最佳时机IV、最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

文章目录前言一、买卖股票的最佳时机III&#xff08;力扣123&#xff09;二、买卖股票的最佳时机IV&#xff08;力扣188&#xff09;三、最佳买卖股票时机含冷冻期&#xff08;力扣309&#xff09;四、买卖股票的最佳时机含手续费&#xff08;力扣714&#xff09;股票买卖问题总…

office365 word 另存为 pdf 的注意事项和典型设置

0. 操作环境介绍 Office 版本&#xff1a;Office 365 版本 不同版本的操作可能有所不同 1. 基本操作 – 另存为 pdf 【文件】 --> 【另存为】&#xff0c;选择适当的文件路径、文件名保存类型选择【PDF】点击【保存】 1. 导出的pdf包含目录标签 word中&#xff0c;可使用…

Head First设计模式---1.策略模式

4.1策略模式&#xff1a; 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c;我们需要做一个鸭子游戏&#xff0c;游戏中会出现各种鸭子&#xff…