前端预览图片的两种方式:转Base64预览或转本地blob的URL预览

收藏家
• 阅读 879

预览图片

  • 一般情况下,预览图片功能,是后端返回一个图片地址资源(字符串)给前端,如:http://ashuai.work/static/img/avantar.png
  • 前端再把这个值丢到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-f3d8f3396766
            previewImage.src = tempUrl;
        });
    </script>
</body>
</html>
A good memory is better than a bad pen. Write it down...
点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表(关于日期时间时分秒显示不出来)
在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp
Wesley13 Wesley13
4年前
java工作流引擎 Activiti6.0 websocket 即时聊天发图片文字 好友群组 SSM源码
时通讯:支持好友,群组,发图片、文件,消息声音提醒,离线消息,保留聊天记录工作流模块1.模型管理  :web在线流程设计器、预览
马丁路德 马丁路德
4年前
小程序 - 保存图片到相册
在做小程序项目的时候,有需求要做一个开票功能,开票之后自然就需要查看发票,在让后台做成图片返回之后,我想了一下,查看发票除了需要看发票图片,提供预览图片可以放大缩小看外,最好应该还要有一个保存图片的功能吧。刚好微信小程序提供了预览和保存相册两个API,就正好用上。因为预览比较简单,我就只是把保存相册的开发流程写下来,供大家也供自己往后参考了,有什
Stella981 Stella981
4年前
Mac 终端效率神技
一、增强各种预览的插件预览查看图片分辨率&大小代码语法高亮快速预览zip压缩包内容快速预览markdown格式内容brewcaskinstallqlcolorcodebetterzipqlqlimagesizeqlmarkdown二、iTerm2
Wesley13 Wesley13
4年前
PHP之微信JSSDK图片上传预览下载到服务器
1.投票报名!PHP之微信JSSDK图片上传预览下载到服务器(http://www.zhimengzhe.com/d/file/shujuku/rontcpmvppy.png)主要实现报名功能(1)form表单布局<sectionclass"content"<divid"errormsg"
Stella981 Stella981
4年前
Cocos Creator基础教程(10)—预览调试
游戏预览是开发中的一个重要环节,CocosCreator游戏引擎基于JavaScript语言有着丰富强大的预览调试能力,这次我们介绍预览调试相关的技术,了解一下这方面的知识相信对你也非常有帮助。1\.游戏预览CocosCreator是跨平台的游戏开发引擎,从类别上主要分为Nativet和H5两大平台,游戏预览也分为这两大模式:
Stella981 Stella981
4年前
Markdown编辑器Haroopad配置
我的配置预览效果,图片过大,可下载后放大查看!输入图片说明(https://static.oschina.net/uploads/img/201610/27211728_gy21.png"在这里输入图片标题")是一款跨平台的markdown编辑器,界面美观,可支持数学表达式,并提供目录支持,自带多套
移动端提高pdf预览清晰度
背景:移动端预览PDF文件,通用的解决方案是使用vuepdf插件,其内置pdf.js,原理是基于HTML5的标签,通过将PDF文件转换为图片或来实现对PDF文件的预览,插件好使没毛病😆,但是如果我们的需求是要在移动端预览内容很密集的文件时,预览效果就不理
taskbuilder taskbuilder
1年前
预览和测试
通过前面的操作,我们已经创建好了一个简单的学员信息管理应用,现在,我们点击项目资源管理器前端文件里的index.tfp,如下图:在打开的前端页面设计器里,点击顶部工具栏上的“预览”按钮:会打开列表页面的预览窗口,如下图所示:说明:预览时,服务器需要编译该页
Immerse Immerse
1年前
我悟了!原来本地图片预览还能这样搞
在网页开发中,经常会遇到需要让用户上传图片并在上传前进行预览的需求。这样做的好处显而易见:用户可以立即看到自己选择的图片是否正确,避免了不必要的上传和服务器资源浪费,提升了用户体验。