前端头像上传功能实现之base64图片/头像上传 详细解析2【扩展知识FileReader对象】
将图片变成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【扩展知识FormData对象】
上传的图片/头像有两种方案上传 第一种我们不对图片做处理直接上传到服务器端,把图片上传到服务器的img文件夹当中,然后我们把图片的地址信息存储在数据库当中,用图片的时候我们直接调用地址 第二种方案是我 ...
- 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决
使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决 参考文章: (1)使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适 ...
- Base64图片还原上传FastDFS源代码
Base64图片上传FastDFS ` @Autowired private FastFileStorageClient fastFileStorageClient; //图片转化成base64字符串 ...
- 洪君:base64图片文件上传转MultipartFile文件、王君:java、springboot 君子:洪君
base64 http://192.168.1.103:8520/ package com.god.nice.service;import org.springframework.web.multi ...
- 世界上第一台计算机高清图片,世界上最强大的数码相机:一张照片32亿像素,相当于378块4K超高清电视屏...
世界上最大的数码相机能够拍摄32亿像素的照片,这是有史以来最大的单拍照片.这架相机计划在2021年被转移到维拉·鲁宾天文台(Rubin Observatory),该天文台是为"时间和空间遗产 ...
- php layui ajax多图上传,Laravel+Layer实现图片上传功能(整理篇)
♩ 背景 昨天在自己的 Laravel5.5 框架项目中,希望集成 Layer 的图片上传功能 但是在 ajax(POST) 提交请求时,一直显示 500 报错 ♪ 分析 ⒈ 问题所在 最后将核心代码 ...
- 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现
在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传 ...
- Vimeo上传功能中的SSRF
前言 Vimeo是一个高清视频播客网站,与大多数类似的视频分享网站不同,Vimeo允许上传1280X700的高清视频,上传后Vimeo会自动转码为高清视频,源视频文件可以自由下载,它达到了真正的高清视 ...
- 附件上传功能测试用例
转载自:https://blog.csdn.net/u011159607/article/details/80144142 序号 测试用例名称 测试用例描述 步骤 预期结果 说明 1 附件上传-文件命 ...
最新文章
- 学python需要什么文化基础-中国文化走的是()的路线。
- AWS Elastic Block Store和Simple Storage Services区别
- 【剑指offer】面试题39:数组中出现次数超过一半的数字
- 青苹果影视系统源码v1.3.20 多功能开源影视源码
- oracle-Ora-01779-内联视图更新法
- 微信小程序 - 手机拍摄图片或选择相册图片上传到服务器(带图片预览与删除功能)
- 【价值积累】属于我的创业感悟
- 【Linux内核分析与应用-陈莉君】进程的调度
- 面向越野地形自动驾驶的语义地形分类
- 解决问题的能力和个人学习能力总结。
- 机器学习的L1、L2损失函数
- java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z
- 输入文字时自动带空格解决办法
- 双臂魔方机器人的学习
- 翻斗式雨量计的组成与工作原理
- C语言链表课程设计(工资管理系统)
- 新唐单片机模拟IIC
- 冲大厂:Java并发六十问,快来看看你会多少道
- 百度网盘如何倍速播放
- 【CAD二次开发】DrawJig绘制MLeader两种交互方式
热门文章
- linux yum 安装的路径在哪,yum 下载软件的存放位置
- 供应链金融区块链应用
- 求生之路:学术生涯的17条简单生存法则
- 尚驰SHANGCHI汽车美容店尚驰洗车店兰州洗美行业中国的工匠力量
- 《深入浅出人工智能(第2版)》之“什么是人工智能?”
- POI导出Excel遇到数据量大该如何解决
- php 5万并发量怎么解决方案,【教程经验】PHP 并发场景的几种解决方案
- Vivado生成BIN/MCS文件
- 小学校本培简讯 计算机技术,鲁巷实验小学开展德育校本培训简讯
- 辨析:×86架构:×86(i386…),×64(×86-64/amd64);arm架构:arm,arm64