Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用html5实现图片预览功能

用html5实现图片预览功能

作者头像
挥刀北上
发布于 2019-08-06 08:45:07
发布于 2019-08-06 08:45:07
6.3K00
代码可运行
举报
文章被收录于专栏:Node.js开发Node.js开发
运行总次数:0
代码可运行

我们在上传图片的时候往往需要预览,目前大部分的网站,总结起来用三种方式来实现:

第一种最为常见,需要和后端配合。点击上传图片的input,触发input的onchange事件,在onchange事件中向后端提供的接口发送图片信息,之后返回的数据中包括图片的url,再将url赋值给img的src属性从而实现图片预览。

当然,前端的朋友会产生疑惑,图片是以什么形式传递到后端呢?针对这个我会单独写一篇文章来阐述,现在暂不详述。简单来说,表单形式传递图片会修改entype属性,这里一般会用formdata实现。

第二种是利用html的新特性FileReader。先来看以下这个demo,建议大家可以将代码拷贝下来自己测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>js图片预览功能</title>

</head>
<body>
<!-- 上传图片的input 绑定onchange事件-->
<input type="file" onchange="previewFile()"><br>
<!-- 预览的图片 -->
<img src="" height="200" width="300" alt="Image preview..."/>
<script language=javascript>
function previewFile() {
 var preview = document.querySelector('img');
 // 选中file元素,并访问其files属性的第一个值
 var file  = document.querySelector('input[type=file]').files[0];
 console.log(document.querySelector('input[type=file]').files);
 console.log(document.querySelector('input[type=file]').files[0]);
 
 var reader = new FileReader();
 reader.onloadend = function () {
  preview.src = reader.result;
 }
 if (file) {
  reader.readAsDataURL(file);
 } else {
  preview.src = "";
 }
}
</script>
</body>
</html>

代码中分别执行了如下两句:

console.log(document.querySelector('input[type=file]').files);

console.log(document.querySelector('input[type=file]').files[0]);

得到的结果分别为:


可以看出file包含着图片的信息:代码再往下面是 new 了一个FileReader ,并且监听的是这个对象的 onloadend事件,事件内容就是修改img的src属性。

FileReader实例化的对象上有个方法:reader.readAsDataURL(参数)

这个方法是个回调函数,参数为上面获取的包含图片信息的file对象,readAsDataURL读取图片信息对象完成后,会触发reader上的onloadend事件,该事件的回调函数中的数据就是datebase64化后的图片信息,将其插入到图片的img的src图片展现。

上面这种方式有些浏览器不是很兼容,不考虑低版本浏览器的情况下完全可以使用。

第三种方法是关于blob的。实现代码如下,相比上面更加简单。

blob参考(http://www.cnblogs.com/hhhyaaon/p/5928152.html)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>js图片预览功能</title>

</head>
<body>
<!-- 上传图片的input 绑定onchange事件-->
<input type="file" id="imgFile" onchange="previewFile()"><br>
<!-- 预览的图片 -->
<img id="img" src="" height="200" width="300" alt="Image preview..."/>
<script language=javascript>
function previewFile() {
    var ele =  document.getElementById('imgFile').files[0];
    var createObjectURL = function(blob){
      return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
    };
    var newimgdata = createObjectURL(ele);
    document.getElementById('img').src = newimgdata;    
}

</script>
</body>
</html>

原理如下:第一步还是获取图片信息 file;第二步将其传入一个方法: window.URL.createObjectURL( )

这个方法返回一个url,url的样式为:

而通过第二种方法实现的url,如图:

结果一目了然,后两种方式相对于第一种来说,预览图片不用向后端提前发送,减轻服务器压力,但都有一定的兼容性问题,可根据具体项目来做选择。

参考: https://developer.mozilla.org/zh-CN/docs/Web/API/Blob http://www.cnblogs.com/hhhyaaon/p/5928152.html http://www.cnblogs.com/saysmy/p/5626337.html http://www.jb51.net/article/78215.htm

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nodejs全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我悟了!原来本地图片预览还能这样搞
在网页开发中,经常会遇到需要让用户上传图片并在上传前进行预览的需求。这样做的好处显而易见:用户可以立即看到自己选择的图片是否正确,避免了不必要的上传和服务器资源浪费,提升了用户体验。
Immerse
2025/02/19
1830
我悟了!原来本地图片预览还能这样搞
浅谈h5文件上传
近期的需求中包含了上传头图(图片)和上传菜品(excel文件)的功能,商家可灵活上传使用自己制作的问卷图片,用户评价上传的菜品。
江米小枣
2020/06/16
2.9K0
浅谈h5文件上传
HTML5-FileReader
链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader/onload
eadela
2019/09/29
5740
HTML5 FileReader接口学习笔记
1、FileReader概述 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。 2、FileReader接口方法 方法名 参数 描述 r
就只是小茗
2018/03/07
9480
5分钟搞定图片裁剪,上传
一开始制作这个需求思路有两个,使用canvas原生或者寻找现成的库,对比了一番觉得canvas实现时间耗费较长,且秉承着不重复造轮子的原则(其实是菜),决定使用Cropper.js。官方封装了很多参数、方法、事件,上手容易,文档阅读体验较好、而且便于扩展。
皮小蛋
2020/03/02
5.2K0
《你不知道的 Blob》番外篇
原文对 Blob 的知识点介绍得非常完整清晰,本文通过四个问题来总结本文核心知识:
pingan8787
2020/06/08
2.7K0
js图片前端预览之 filereader 和 window.URL.createObjectURL
1 //preview img : filereader方式 2 document.getElementById('imgFile').onchange = function(e){ 5 var ele = document.getElementById('imgFile').files[0]; 6 8 var fr = new FileReader(); 9 fr.onload = function(ele){ 10 11
smy
2018/04/03
3.5K0
js图片前端预览之 filereader 和 window.URL.createObjectURL
图片上传预览插件制作思路及Demo分享
一旦选择的路径被改变就把图片上传至服务器,然后就返回图片在服务器端的地址,并且赋值到img元素上。
winty
2019/12/26
1.4K0
H5实现本地预览图片
最后注意一点,H5实现图片预览只能使用原生JS进行DOM元素的操作,若使用jQuery则无法实现该效果。
雪飞鸿
2018/09/05
2.3K0
H5实现本地预览图片
从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
于是就变成了 webkitRequestFullScreen(), mozRequestFullScreen(), msRequestFullScreen()。由于使用的方法不同,所以要做兼容性处理。
Daotin
2018/08/31
9320
从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
【前端知乎】445- File FileList 和 FileReader 对象详解
File 对象、FileList 对象与 FileReader 对象大家或许不太陌生,常见于文件上传下载操作处理(如处理图片上传预览,读取文件内容,监控文件上传进度等问题)。
pingan8787
2019/12/24
1.7K0
【前端知乎】445- File FileList 和 FileReader 对象详解
JS魔法堂之实战:纯前端的图片预览
一、前言                                   图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了。在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上。先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了。   偶然从MDN上找到纯前端图片预览的相关资料,经过整理后记录下来以便日后查阅。 二、准备功夫1──FileRe
^_^肥仔John
2018/01/18
2.5K0
图片上传预览插件制作----URL.createObjectURL()
URL.createObjectURL()静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。 # 2.兼容性
Rattenking
2021/01/29
2.5K0
10行JavaScript代码完成图片的上传预览
冬至,希望大家都可以有饺子和汤圆吃,主要是能和自己家人爱人一起吃个饭。 下面进入主题,用原生JS给撸个图片上传,预览的小示例,希望对大家有所帮助。
Javanx
2019/09/04
1.8K0
10行JavaScript代码完成图片的上传预览
移动端上传图片
<!DOCTYPE html>   <html>   <head>   <title>pc和手机端的图片上传处理</title>   <meta charset="utf-8" />   <meta name="viewport" content="width=device-width" />   </head>   <body>   <p>选择:</p>   <p><input type="file" accept="image/*" id="upload" name="upload"></p>
windseek
2018/06/15
1.4K0
面试题:我现在上传图片的时候提前预览到图片怎么办?
今天我也来标题党一会,用“面试题”蹭一蹭热度,主要还行想深度剖析一下,文件上传,里面的门道。
用户7413032
2020/06/11
1.6K0
面试题:我现在上传图片的时候提前预览到图片怎么办?
通过 html5 FileReader 实现上传图片预览功能
Html 部分 <!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title></title>     </head>     <body>         <input type="file" name="file" onchange="showPreview(this)" />         <img id="portrait" src="" width="70" height="75">     <
大师级码师
2021/09/22
1.7K0
HTML5上传图片预览
笔记一下!!! <!DOCTYPE html> <html> <head> <title>HTML5上传图片预览</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://www.codefans.net/ajaxjs/jquery-1.6.2.min.js"></script> </head> <body> <h3>请选择图片文件:JPG/GIF</h3> <form na
deepcc
2018/05/16
4.7K0
Javascript上传图片转base64并预览,拿走不谢!
input的file类型在浏览器中会渲染为一个按钮和一段文字。当你点击按钮时会打开文件选择窗口,文字表示对文件的描述;如图:
用户1272076
2019/03/26
9.5K0
Javascript上传图片转base64并预览,拿走不谢!
文件上传组件
那天临近下班,产品在群里丢下一句话:“咱们页面上那个上传组件太土了,能不能搞个现代点的,图片还能预览的?”
繁依Fanyi
2025/05/08
1760
相关推荐
我悟了!原来本地图片预览还能这样搞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验