将图片变成base64字符串
base64是一种数据格式 就是一个字符串可以当图片来使用

// base64之将图片在前端变为base64格式

1.先获取图片
2.FileReader对象将图片进行转换(转成base64格式)

屁话不多说强行上代码看官勿笑

 <!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="file" id="file"><button id="cs">上传</button><img src="" alt="" id="x">
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<script>// base64将图片变成base64字符串// base64是一种数据格式 就是一个字符串可以当图片来使用// base64之将图片在前端变为base64格式// 1.先获取图片// 2.FileReader对象将图片进行转换cs.onclick = function () {var file = document.querySelector("#file").files[0]console.log(file);// 内置构造函数的方式创建一个FileReader对象var fileReader = new FileReader()console.log("fileReader→",fileReader);// fileReader.readAsDataURL(file)这个方法是把列表清单里面的信息转化成base64,参数为file是列表清单信息fileReader.readAsDataURL(file)// fileReader.onload事件是等fileReader.readAsDataURL(file)转化为base64结束后监听的一个异步的回调函数fileReader.onload = function () {// 异步回调函数当中,fileReader.result就是转化后的base64字符,可以直接用在img标签的src属性上console.log("图片转化完毕!");// 其中内部的fileReader.result可以换成this(this指向问题)console.log("转换结果!",fileReader.result);$("#x").attr("src",fileReader.result)}}
</script></html>

FileReader
FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。

使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据。
创建实例
var reader = new FileReader();








二进制数据上传
HTML5体系的建立引入了一大堆新的东西,基于XHR2,我们可以直接上传或下载二进制内容,无需像以往一样通过form标签由后端拉取二进制内容。
简单整理下上传逻辑:
1、通过input[type=“file”]标签获取本地文件File对象
2、通过FileReader的readAsArrayBuffer方法将File对象转换为ArrayBuffer
3、创建xhr对象,配置请求信息
4、通过xhr.sendAsBinary直接将文件的ArrayBuffer内容装填至post body后发送
代码实现如下:

var input  = document.getElementById("file");   // input file
input.onchange = function(){var file = this.files[0];if(!!file){var reader = new FileReader();reader.readAsArrayBuffer(file);reader.onload = function(){var binary = this.result;upload(binary);}}
}//文件上传
function upload(binary){var xhr = new XMLHttpRequest();xhr.open("POST", "http://xxxx/opload");xhr.overrideMimeType("application/octet-stream");//直接发送二进制数据if(xhr.sendAsBinary){xhr.sendAsBinary(binary);}else{xhr.send(binary);}// 监听变化xhr.onreadystatechange = function(e){if(xhr.readyState===4){if(xhr.status===200){// 响应成功       }}}
}

总结
本篇主要介绍了FileReader对象的属性及应用场景,有了FileReader,我们可以将本地文件读取到内存中。文中我们提到了ArrayBuffer和类型化数组的概念,这使得我们可以在内存中进一步操作二进制数据,关于这部分内容,会在之后的博客中进行归纳。

前端头像上传功能实现之base64图片/头像上传 详细解析2【扩展知识FileReader对象】相关推荐

  1. 前端头像上传功能实现之普通图片/头像上传 详细解析1【扩展知识FormData对象】

    上传的图片/头像有两种方案上传 第一种我们不对图片做处理直接上传到服务器端,把图片上传到服务器的img文件夹当中,然后我们把图片的地址信息存储在数据库当中,用图片的时候我们直接调用地址 第二种方案是我 ...

  2. 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决

    使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决 参考文章: (1)使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适 ...

  3. Base64图片还原上传FastDFS源代码

    Base64图片上传FastDFS ` @Autowired private FastFileStorageClient fastFileStorageClient; //图片转化成base64字符串 ...

  4. 洪君:base64图片文件上传转MultipartFile文件、王君:java、springboot 君子:洪君

    base64  http://192.168.1.103:8520/ package com.god.nice.service;import org.springframework.web.multi ...

  5. 世界上第一台计算机高清图片,世界上最强大的数码相机:一张照片32亿像素,相当于378块4K超高清电视屏...

    世界上最大的数码相机能够拍摄32亿像素的照片,这是有史以来最大的单拍照片.这架相机计划在2021年被转移到维拉·鲁宾天文台(Rubin Observatory),该天文台是为"时间和空间遗产 ...

  6. php layui ajax多图上传,Laravel+Layer实现图片上传功能(整理篇)

    ♩ 背景 昨天在自己的 Laravel5.5 框架项目中,希望集成 Layer 的图片上传功能 但是在 ajax(POST) 提交请求时,一直显示 500 报错 ♪ 分析 ⒈ 问题所在 最后将核心代码 ...

  7. 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

    在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传 ...

  8. Vimeo上传功能中的SSRF

    前言 Vimeo是一个高清视频播客网站,与大多数类似的视频分享网站不同,Vimeo允许上传1280X700的高清视频,上传后Vimeo会自动转码为高清视频,源视频文件可以自由下载,它达到了真正的高清视 ...

  9. 附件上传功能测试用例

    转载自:https://blog.csdn.net/u011159607/article/details/80144142 序号 测试用例名称 测试用例描述 步骤 预期结果 说明 1 附件上传-文件命 ...

最新文章

  1. 学python需要什么文化基础-中国文化走的是()的路线。
  2. AWS Elastic Block Store和Simple Storage Services区别
  3. 【剑指offer】面试题39:数组中出现次数超过一半的数字
  4. 青苹果影视系统源码v1.3.20 多功能开源影视源码
  5. oracle-Ora-01779-内联视图更新法
  6. 微信小程序 - 手机拍摄图片或选择相册图片上传到服务器(带图片预览与删除功能)
  7. 【价值积累】属于我的创业感悟
  8. 【Linux内核分析与应用-陈莉君】进程的调度
  9. 面向越野地形自动驾驶的语义地形分类
  10. 解决问题的能力和个人学习能力总结。
  11. 机器学习的L1、L2损失函数
  12. java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z
  13. 输入文字时自动带空格解决办法
  14. 双臂魔方机器人的学习
  15. 翻斗式雨量计的组成与工作原理
  16. C语言链表课程设计(工资管理系统)
  17. 新唐单片机模拟IIC
  18. 冲大厂:Java并发六十问,快来看看你会多少道
  19. 百度网盘如何倍速播放
  20. 【CAD二次开发】DrawJig绘制MLeader两种交互方式

热门文章

  1. linux yum 安装的路径在哪,yum 下载软件的存放位置
  2. 供应链金融区块链应用
  3. 求生之路:学术生涯的17条简单生存法则
  4. 尚驰SHANGCHI汽车美容店尚驰洗车店兰州洗美行业中国的工匠力量
  5. 《深入浅出人工智能(第2版)》之“什么是人工智能?”
  6. POI导出Excel遇到数据量大该如何解决
  7. php 5万并发量怎么解决方案,【教程经验】PHP 并发场景的几种解决方案
  8. Vivado生成BIN/MCS文件
  9. 小学校本培简讯 计算机技术,鲁巷实验小学开展德育校本培训简讯
  10. 辨析:×86架构:×86(i386…),×64(×86-64/amd64);arm架构:arm,arm64