A-A+
js 本地图片上传预览实现代码
下面介绍的代码只支持ie,ff浏览器,其它的暂时不支持哦,google浏览器暂时无法解决这个问题,下面看我给出的两个实例.
IE 浏览器下,代码如下:
- document.getElementById("upload").onchange = function()
- {
- document.getElementById("image").src = this.value;
- }
FF下有getAsDataURL的方法可以生成图片的DataURL,代码如下:
- document.getElementById("upload").onchange = function()
- {
- document.getElementById("image").src = this.files[0].getAsDataURL();
- }
我们把上面的代码总结一下,代码如下:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <script type="text/javascript">
- /**
- * 从 file 域获取 本地图片 url
- */
- function getFileUrl(sourceId) {
- var url;
- if (navigator.userAgent.indexOf("MSIE")>=1) { // IE
- url = document.getElementById(sourceId).value;
- } else if(navigator.userAgent.indexOf("Firefox")>0) { // Firefox
- url = document.getElementById(sourceId).files.item(0).getAsDataURL();
- }
- return url;
- }
- /**
- * 将本地图片 显示到浏览器上
- */
- function preImg(sourceId, targetId) {
- var url = getFileUrl(sourceId);
- var imgPre = document.getElementById(targetId);
- imgPre.src = url;
- }
- </script>
- </head>
- <body>
- <form action="">
- <input type="file" name="imgOne" id="imgOne" onchange="preImg(this.id,'imgPre');" />
- <img id="imgPre" src="" width="300px" height="300px" style="display: block;" />
- </form>
- </body>
- </html>
用DOM来创建对象.
在上面的XHTML代码中,我们为了预览图片,事先加入了一个没有设置src的img对象,除去不美观、代码冗余之外,如果用户浏览器不支持Javascript,他不仅无法使用这个功能,还要接受页面上一个永远不会显示出来的破图,要解决这个问题,我们就需要在“运行时”再生成这个img对象,途径还是DOM,代码如下:
- <input type=file name="doc" id="doc" onchange="javascript:setImagePreview();">
- <p>
- <div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div>
- </p>
- <script>
- function setImagePreview() {
- var docObj=document.getElementById("doc");
- var fileName = docObj.value;
- var imgObjPreview=document.getElementById("preview");
- if(docObj.files && docObj.files[0]){
- //火狐下,直接设img属性
- imgObjPreview.style.display = 'block';
- imgObjPreview.style.width = '150px';
- imgObjPreview.style.height = '120px';
- imgObjPreview.src = docObj.files[0].getAsDataURL();
- }else{
- //IE下,使用滤镜
- docObj.select();
- var imgSrc = document.selection.createRange().text;
- var localImagId = document.getElementById("localImag");
- //必须设置初始大小
- localImagId.style.width = "150px";
- localImagId.style.height = "120px";
- //图片异常的捕捉,防止用户修改后缀来伪造图片
- try{
- localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
- localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
- }catch(e){
- alert("您上传的图片格式不正确,请重新选择!");
- return false;
- }
- imgObjPreview.style.display = 'none';
- document.selection.empty();
- }
- return true;
- }
- </script>