当前位置: 首页 > news >正文

前端预览图片的两种方式:转Base64预览或转本地blob的URL预览,并再重新转回去

🧑‍💻 写在开头
点赞 + 收藏 === 学会🤣🤣🤣

预览图片

  • 一般情况下,预览图片功能,是后端返回一个图片地址资源(字符串)给前端,如:ashuai.work/static/img/…
    前端再把这个值丢到img图片的src属性中去即可

  • 之所以有这个图片地址资源,也是因为之前有上传图片的操作,后端存到文件服务器上,生成一份图片url地址

  • 但是某些情况下,需要前端去临时预览一下图片(是否上传是后续的操作,需要先看一下)

  • 这个时候,我们有两种方案

  • 方式一 转base64预览

  • 方式二 生成blob图片预览路径url

方案一 FileReader的readAsDataURL方法

复制粘贴即演示
代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body><input type="file" id="fileInput"><img id="previewImage" src="" alt="Preview Image"><script>const fileInput = document.getElementById('fileInput');const previewImage = document.getElementById('previewImage');fileInput.addEventListener('change', function () {const file = fileInput.files[0];const reader = new FileReader();reader.onload = function (e) {const base64String = e.target.result;previewImage.src = base64String;console.log('图片读取的Base64的值为--->', base64String);};reader.readAsDataURL(file);});</script>
</body>
</html>

解析:

  • FileReader 之所以能读出图片的 Base64 的值
  • 是因为 readAsDataURL 方法本身就可以将图片的二进制数据转化为 Base64 编码
  • 并将编码后的字符串以 Data URL 的形式返回以供使用

就是语言的创造者提前把这个图片转Base64的功能封装成一个方法以供我们调用

方案二 URL.createObjectURL方法

createObjectURL是JS自带的一个函数,它可以将Blob、File等二进制文件转为浏览器可直接显示的URL地址,从而方便进行展示

代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body><input type="file" id="fileInput"><img id="previewImage" src="" alt="Preview Image"><script>const fileInput = document.getElementById('fileInput');const previewImage = document.getElementById('previewImage');fileInput.addEventListener('change', function () {const file = fileInput.files[0];let tempUrl = window.URL.createObjectURL(file)console.log('blob--->', tempUrl); // blob:http://127.0.0.1:5500/84d2e951-33dc-4fea-840a-f3d8f3396766previewImage.src = tempUrl;});</script>
</body>
</html>

附加方法 Blob转Base64方法

imageBase64:function(img) {var toBase64= new Promise(function(resolve, reject){window.URL = window.URL || window.webkitURL;var xhr = new XMLHttpRequest();xhr.open("get", img, true);// 至关重要xhr.responseType = "blob";//文件流xhr.onload = function (res) {if (res.currentTarget.status == 200) {//得到一个blob对象var blob = res.currentTarget.response;// 至关重要let oFileReader = new FileReader();oFileReader.onloadend = function (e) {let base64 = e.target.result;//base64resolve(base64)};oFileReader.readAsDataURL(blob);}}xhr.send();});return toBase64;},

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 纹波电流与ESR:解析电容器重要参数与应用挑战
  • 水库大坝安全监测险情主要内容
  • el-date-picker 限制选择六个月内的日期
  • [图解]SysML和EA建模住宅安全系统-13-时间图
  • xss攻击
  • 容器之docker compose
  • 《简历宝典》08 - 简历中“教育背景”模块如何扬长避短
  • 48、DR+keepalive
  • JS【详解】类 class ( ES6 新增语法 )
  • Golang | Leetcode Golang题解之第227题基本计算器II
  • 架构面试-场景题-单点登录(SSO)怎么实现的
  • ELK日志分析系统概述及部署
  • x264 编码器 AArch64 汇编函数模块关系分析
  • 【数据结构】排序——快速排序
  • 计算机网络体系结构解析
  • 【译】理解JavaScript:new 关键字
  • 2019年如何成为全栈工程师?
  • CSS中外联样式表代表的含义
  • DOM的那些事
  • HTTP--网络协议分层,http历史(二)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • javascript 总结(常用工具类的封装)
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux Process Manage
  • rc-form之最单纯情况
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 代理模式
  • 关于for循环的简单归纳
  • 七牛云假注销小指南
  • 如何设计一个微型分布式架构?
  • 数组大概知多少
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 用Python写一份独特的元宵节祝福
  • 智能合约Solidity教程-事件和日志(一)
  • Java性能优化之JVM GC(垃圾回收机制)
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 容器镜像
  • ‌移动管家手机智能控制汽车系统
  • #nginx配置案例
  • #QT 笔记一
  • $(selector).each()和$.each()的区别
  • (Charles)如何抓取手机http的报文
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (笔记)M1使用hombrew安装qemu
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (简单) HDU 2612 Find a way,BFS。
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转) 深度模型优化性能 调参
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .NET Core 中的路径问题
  • .NET IoC 容器(三)Autofac