前端 上传预览功能实现

Posted moli-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端 上传预览功能实现相关的知识,希望对你有一定的参考价值。

 <div  style="position: relative;">
     <input id="files" type="file" onchange="previewImage(this, ‘prvid‘)" multiple="multiple" style="cursor: pointer;z-index: 9999;position: absolute;opacity: 0;padding: 80px 0px;">  
      <div id="prvid" style="border: 1px solid #bfbfbf; height: 160px; width: 270px; border-radius: 10px;">
            <img src="../resources/imgs/selectImg.png" style="position: absolute;top: 50px;left: 130px;" /> 
            <p class="showFileName" style="margin-top: 95px;color: #bfbfbf; text-align: center;">选择文件</p>
      </div>
 </div>
function previewImage(file, prvid) { 
	/* file:file控件 
	* prvid: 图片预览容器 
	*/ 
	var prvbox = document.getElementById(prvid);
	var tip = "请上传jpg/png/gif格式的图片文件!"; // 设定提示信息 
	var filters = { 
	"jpeg" : "/9j/4", 
	"gif" : "R0lGOD", 
	"png" : "iVBORw" 
	} 
	var html1 = ‘<img src="../resources/imgs/selectImg.png" style="position: absolute;top: 50px;left: 130px;" />‘+ 
        		‘<p class="showFileName" style="margin-top: 95px;color: #bfbfbf; text-align: center;">选择文件</p>‘;
	if (window.FileReader) { // html5方案
		var fileSize = file.files[0].size
		if(fileSize>500000){
			alert("请上传小于500K的文件!")
			return;
		}
		for (var i=0, f; f = file.files[i]; i++) { 
			var fr = new FileReader(); 
			fr.onload = function(e) { 
			var src = e.target.result; 
			if (!validateImg(src)) { 
				alert(tip) 
				} else { 
				showPrvImg(src); 
			} 
		} 
		fr.readAsDataURL(f); 
		} 
		} else { // 降级处理

		if ( !/.jpg$|.png$|.gif$/i.test(file.value) ) { 
			alert(tip); 
		} else { 
			var fileObj = file.files[0].size;
			console.log(fileObj);
			showPrvImg(file.value); 
		} 
	} 

	function validateImg(data) { 
		var pos = data.indexOf(",") + 1; 
		for (var e in filters) { 
			if (data.indexOf(filters[e]) === pos) { 
				return e; 
			} 
		} 
		return null; 
	} 

	function showPrvImg(src) { 
		var img = document.createElement("img"); 
		img.src = src; 
		img.style.width = "270px"; 
		img.style.height = "160px"; 
		img.style.borderRadius = "10px"; 
		//img.style.filter = ‘alpha(opacity:‘+50+‘)‘; //设置IE的透明度 
		//img.style.opacity = 50 / 100; //设置fierfox等透明度,注意透明度值是小数 
		prvbox.innerHTML = ""; 
		prvbox.appendChild(img); 
		var file = $("#files").val();
		var arr=file.split(‘\‘);
		console.log(arr)
        var fileName=arr[arr.length-1];
		console.log(fileName)
		//document.getElementsByClassName(‘showFileName‘).innerHTML=fileName; 
        //$(".showFileName").val(fileName);
        //$(".showFileName").html(fileName);
		} 
	}

  直接粘代码吧;

  然后

       上传预览的原理就是:

    通过input的type=file属性和window的内置FileReader对象,利用FileReader对象的readAsDataURL方法把图片数据转成base64字符串数据,然后把这个base64字符串数据赋值给一个图片标签的src属性..

  然后 

  就实现预览效果啦

      

以上是关于前端 上传预览功能实现的主要内容,如果未能解决你的问题,请参考以下文章

jquery+html实现前端的上传图片预览

用openoffice+jodconverter+webuploader+pdf.js实现文件上传在线预览功能

前端图片预览,上传前预览,兼容IE7891011,Firefox,Chrome

JavaScript实现简单的前端上传图片预览

微信小程序实现图片是上传预览功能

Vue结合element ui 实现图片上传可预览,可删除,以base64字符串上传到服务器