我的心是看不见的快车,永远在路上

© 梦想家
Powered by LOFTER

JS图片上传预览

想实现上传预览功能.

首先想到考虑再inputfile change时候上传图片到服务器.然后再返回一个图片地址加入到Dom里面。然后听小斌说用JS预览本地图片.(我X!!!还有这玩意,为啥我不知道!!!)然后真的立马爽多了.

源代码:

<html xmlns="https://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <title>get file input full path</title> 
            <script type="text/javascript">
                function PreviewImage(obj, imgPreviewId, divPreviewId) {
                   
                    var allowExtention = ".jpg,.bmp,.gif,.png"; //,允许上传文件的后缀名
                    var extention = obj.value.substring(obj.value.lastIndexOf(".") + 1).toLowerCase();
                    var browserVersion = window.navigator.userAgent.toUpperCase();
                    if (allowExtention.indexOf(extention) > -1) {
                        if (browserVersion.indexOf("MSIE") > -1) {
                            if (browserVersion.indexOf("MSIE 6.0") > -1) {//ie6
                                document.getElementById(imgPreviewId).setAttribute("src", obj.value);
                            } else {//ie[7-8]、ie9
                                obj.select();
                                var newPreview = document.getElementById(divPreviewId + "New");
                                if (newPreview == null) {
                                    newPreview = document.createElement("div");
                                    newPreview.setAttribute("id", divPreviewId + "New");
                                    newPreview.style.width = 160;
                                    newPreview.style.height = 170;
                                    newPreview.style.border = "solid 1px #d2e2e2";
                                }
                                newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";
                                var tempDivPreview = document.getElementById(divPreviewId);
                                tempDivPreview.parentNode.insertBefore(newPreview, tempDivPreview);
                                tempDivPreview.style.display = "none";
                            }
                        } else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox
                            var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]);
                            if (firefoxVersion < 7) {//firefox7以下版本
                                document.getElementById(imgPreviewId).setAttribute("src", obj.files[0].getAsDataURL());
                            } else {//firefox7.0+                    
                                document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(obj.files[0]));
                            }
                        } else if (obj.files) {
                            //兼容chrome、火狐等,HTML5获取路径                   
                            if (typeof FileReader !== "undefined") {
                                var reader = new FileReader();
                                reader.onload = function (e) {
                                    document.getElementById(imgPreviewId).setAttribute("src", e.target.result);
                                }
                                reader.readAsDataURL(obj.files[0]);
                            } else if (browserVersion.indexOf("SAFARI") > -1) {
                                alert("暂时不支持Safari浏览器!");
                            }
                        } else {
                            document.getElementById(divPreviewId).setAttribute("src", obj.value);
                        }
                    } else {
                        alert("仅支持" + allowSuffix + "为后缀名的文件!");
                        obj.value = ""; //清空选中文件
                        if (browserVersion.indexOf("MSIE") > -1) {
                            obj.select();
                            document.selection.clear();
                        }
                        obj.outerHTML = obj.outerHTML;
                    }
                }
</script>  
     </head> 
     <body> 
  <form name="form5" id="form5"> 
<input type="file" name="file5" id="file5" onchange="PreviewImage(this,'imgView','divNewPreview')"/> 
<img id="imgView" src=""  alt="" />
<div id="divNewPreview"></div>
</form>
     </body> 
 </html>

实际上是把上传的图片转换为了base64显示的.这种方法太方便了!

评论 ( 1 )
热度 ( 2 )