用javascript实现图片上传并预览

最近在开发的过程中遇到了一个图片上传并预览的问题。其实这问题不难。chrome,FF,IE10+可以用FileReader来实现。IE9-可以用css的滤镜来实现。一开始我也是这样干了。但是测试的时候ie9-老是显示不了图片。我以为是方法出现问题。于是找度娘,找谷歌;几乎都是这样实现的。搞了好久,都不知哪出问题了。最后才发现是测试的出现问题。我用IE-test来测试,还有IE11的仿真,其实这些都是不准确的。如果真的想测试在IE系列的效果,最好就对应版本的IE浏览器。这个可以用虚拟机实现,也可以用browserstack。一个很牛的云端虚拟机,几乎集成了所有的系统跟浏览器,不好的一点就是要钱。也对,那么好的东西不要钱就没天理了

下面附上代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>图片上传预览演示-柯乐义</title>
    <style>
        .img-container{
            width: 293px;
            height: 150px;
            background:#F2F2F2;
            margin-bottom:35px;
            overflow: hidden;
            border: 1px solid #000;
        }
        .img-container>img{
            width: 293px;
            height: 150px;
        }
        .img{
            width: 293px;
            height: 150px;
        }
    </style>
</head>
<body>
    <form name="/" class="card-form">
        <div>
            <div class="img-container"></div>
            <input class="img-btn" type="file" id="drivingLicence" name="drivingLicence">
        </div>
    </form>
    <script>
        /**
         * Created by Administrator on 2016/4/28.
         */
//上传图片并预览
        function previewImg(fileInput,imgDiv){
            if(window.FileReader){//支持FileReader的时候
                var reader=new FileReader();
                reader.readAsDataURL(fileInput.files[0]);
                reader.onload=function(evt){
                    imgDiv.innerHTML="\<img src="+evt.target.result+"\>";
                }
            }else{//兼容ie9-
                imgDiv.innerHTML='<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + fileInput.value + '\)\';"></div>';
            }
        }
        function selectImg(fileInputs,imgDivs){
            var checkImg=new RegExp("(.jpg$)|(.png$)|(.bmp$)|(.jpeg$)","i");
            var i=0;
            for(;i<fileInputs.length&&i<imgDivs.length;i++){
                (function(i){//立即执行函数;保存i
                    fileInputs[i].onchange=function(){
                        if(checkImg.test(fileInputs[i].value)){
                            previewImg(this,imgDivs[i]);
                        }else{
                            alert("只支持上传.jpg .png .bmp .jpeg;你的选择有误");
                        }
                    };
                })(i);
            }

        }
        /* 为IE6 IE7 IE8增加document.getElementsByClassName函数 */
        /MSIE\s*(\d+)/i.test(navigator.userAgent);
        var isIE=parseInt(RegExp.$1?RegExp.$1:0);
        if(isIE>0&&isIE<9){
            document.getElementsByClassName=function(cls){
                var els=this.getElementsByTagName('*');
                var ell=els.length;
                var elements=[];
                for(var n=0;n<ell;n++){
                    var oCls=els[n].className||'';
                    if(oCls.indexOf(cls)<0)        continue;
                    oCls=oCls.split(/\s+/);
                    var oCll=oCls.length;
                    for(var j=0;j<oCll;j++){
                        if(cls==oCls[j]){
                            elements.push(els[n]);
                            break;
                        }
                    }
                }
                return elements;
            }
        }
        var fileInputs=document.getElementsByClassName("img-btn");//文件选择按钮
        var imgDivs=document.getElementsByClassName("img-container");//图片容器
        selectImg(fileInputs,imgDivs);
    </script>
</body>
</html>
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现图片,需要以下步骤: 1. 在前端页面添加一个input标签,type属性设置为file,用于选择本地图片。 ``` <input type="file" id="fileInput" onchange="previewImage()"/> ``` 2. 在前端页面添加一个用于图片的标签,例如img标签。 ``` <img id="preview" src="" alt="图片" style="max-width:200px;max-height:200px;"> ``` 3. 在JavaScript实现图片的功能。 ``` function previewImage() { // 获取选择的文件对象 var file = document.getElementById("fileInput").files[0]; // 创建FileReader对象 var reader = new FileReader(); // 读取文件内容 reader.readAsDataURL(file); // 当文件读取完成时触发onload事件 reader.onload = function(e) { // 获取图片的标签对象 var preview = document.getElementById("preview"); // 设置图片的地址 preview.src = e.target.result; } } ``` 4. 在后端处理上图片实现图片的后端代码可以使用Java提供的Servlet或Spring MVC框架等进行实现。 以下是一个简单的Servlet上图片的示例代码: ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上的文件对象 Part part = request.getPart("file"); // 获取文件名 String fileName = part.getSubmittedFileName(); // 获取文件保存的路径 String savePath = request.getServletContext().getRealPath("/upload"); // 创建保存文件的目录 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdirs(); } // 生成保存文件的唯一名称 String uuid = UUID.randomUUID().toString(); String saveName = uuid + "_" + fileName; // 保存文件 part.write(savePath + File.separator + saveName); // 返回保存的文件路径 String filePath = request.getContextPath() + "/upload/" + saveName; response.getWriter().write(filePath); } ``` 在前端页面中,可以使用Ajax将选择的图片文件上到后端进行处理,并将返回的文件路径设置到图片的标签中。 ``` function uploadImage() { var file = document.getElementById("fileInput").files[0]; // 创建FormData对象,用于封装需要上的数据 var formData = new FormData(); formData.append("file", file); // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 设置请求方式和请求地址 xhr.open("POST", "/uploadServlet"); // 发送请求 xhr.send(formData); // 当请求状态改变时触发onreadystatechange事件 xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 获取图片的标签对象 var preview = document.getElementById("preview"); // 设置图片的地址 preview.src = xhr.responseText; } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值