jQuery 多图片上传前的预览

基于jQuery 多图片上传前的预览,好东西赶紧记录下来,嘻嘻;
废话不多说,先看效果:
效果图
代码也很简单,由于引用了在线资源库,可以直接拷贝运行。

<!DOCTYPE html>
<html>
<head>
<title>HTML5上传图片预览</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h3>请选择图片文件:</h3>
<!-- 这里特别说一下这个 multiple="multiple" 添加上这个之后可以一次选择多个文件进行上传,是 html5 的新属性-->
<form id="uploadForm" style="margin-top: 20px;" method="post"
	enctype="multipart/form-data">
	<div class="form-group">
		<label for="name">图片上传</label>
		<input type="file" name="file" id="file" multiple="multiple"
			class="form-control">
		<br>
		<img src="" id="img" style="display: none">
	</div>
</form>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script> 
		//生成类似于UUID的随机数
		function _getRandomString(len) {
		    len = len || 32;
		    var $chars = 'ABCDEFGHIJKLMNPOQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789'; 
		    var maxPos = $chars.length;
		    var pwd = '';
		    for (i = 0; i < len; i++) {
		        pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
		    }
		    return pwd;
		}

		//预览图片
		$(":file").change(function() {
			// getObjectURL是自定义的函数,见下面  
			// this.files[0]代表的是选择的文件资源的第一个,因为上面写了 multiple="multiple" 就表示上传文件可能不止一个  
			// ,但是这里只读取第一个  
			var fileList = this.files;
			var imgobj = $(this).next().next();//第一个img
			imgobj.nextAll(".addImg").remove(); //将后续添加的兄弟节点去掉再重新添加
			for (var i = 0; i < fileList.length; i++) {
				var randrom = _getRandomString(32);
				var picHtml = '<img src="" class="addImg" id="img'+randrom+'" />';
				var objUrl = getObjectURL(this.files[i]);
				imgobj.after(picHtml);
				$("#img"+randrom).attr("src", objUrl);
			}
		});
		//建立一個可存取到該file的url  
		function getObjectURL(file) {
			var url = null;
			// 下面函数执行的效果是一样的,只是需要针对不同的浏览器执行不同的 js 函数而已  
			if (window.createObjectURL != undefined) { // basic  
				url = window.createObjectURL(file);
			} else if (window.URL != undefined) { // mozilla(firefox)  
				url = window.URL.createObjectURL(file);
			} else if (window.webkitURL != undefined) { // webkit or chrome  
				url = window.webkitURL.createObjectURL(file);
			}
			return url;
		}
</script>
</body>
</html>

记录下主要思想:

  1. 首先上传前的必备不能少,虽然此次没有实现上传功能:表单提交为post,声明enctype="multipart/form-data"以及文本框类型为file,另外需要多文件上传需要多声明一个multiple=“multiple”;
  2. 目前表单声明一个隐藏的img标签(后续没有用到,有兴趣可以稍微优化下),再通过此标签动态的在后面添加img标签,在对其赋予一个可读取file的url,以达到显示多图片的效果;在谷歌和火狐浏览器亲测通过。
  3. 对动态的img标签使用了一个类似于java UUID的随机字符串命名(为什么呢?),因为只是使用循环的***i***来声明img标签时,如果有两个文件上传按钮来上传多文件时会造成id重复,导致图片显示不出;当然上述代码没有这个问题,使用***i***来对img命名即可。

目前发现个bug,就是在有两个上传文件时,先上传后面的图片,再上传前面的图片,会将后面的预览图删除,但文件还是存在的,如有上传不会不影响,留待后续有时间再来解决。

参考文章:
https://blog.csdn.net/yqxllwy/article/details/52470636
http://www.jq22.com/webqd3746
https://blog.csdn.net/fengqingtao2008/article/details/41514159
https://www.cnblogs.com/weijieyun/p/6103829.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 layui 的 upload 模块和 jquery 实现多图片上传。 1. 引入 layui 和 jquery: ``` <link rel="stylesheet" href="layui/css/layui.css"> <script src="jquery/jquery.min.js"></script> <script src="layui/layui.all.js"></script> ``` 2. 定义上传组件: ``` <div class="layui-upload"> <button type="button" class="layui-btn" id="upload">上传图片</button> <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> 预览图: <div class="layui-upload-list" id="preview"></div> </blockquote> </div> ``` 3. 初始化上传组件: ``` layui.use('upload', function(){ var upload = layui.upload; //执行实例 var uploadInst = upload.render({ elem: '#upload', //绑定元素 multiple: true, //是否允许多文件上传 accept: 'images', //指定允许上传的文件类型 field: 'file', //设定文件域的字段名 url: '/upload/', //上传接口 done: function(res){ //上传完毕回调 console.log(res); $('#preview').append('<img src="'+ res.url +'" class="layui-upload-img">') }, error: function(){ //请求异常回调 } }); }); ``` 说明: - `elem`:绑定选择器,即上传按钮的选择器。 - `multiple`:是否允许多文件上传。 - `accept`:指定允许上传的文件类型。 - `field`:设定文件域的字段名。 - `url`:上传接口。 - `done`:上传完毕回调函数。 - `error`:请求异常回调函数。 4. 上传成功后,将图片预览在页面上: ``` $('#preview').append('<img src="'+ res.url +'" class="layui-upload-img">') ``` 说明: - `#preview`:预览图片的容器选择器。 - `res.url`:上传成功后返回的图片地址。 以上就是利用 layui 和 jquery 实现多图片上传的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值