利用jquery,html5实现图片预览实时上传

image          image
html代码


    <div class="form-group">
         <label for="pic" class="col-md-1 control-label">小图:</label>
         <div class="col-md-4">
             <input type="file" class="form-control" name="pic" />
             <div class="progress"><span class="bgpro"></span></div>
             <img src="" width="100px" style="display:none" class="pic_show"/>
         </div>
   </div>
css代码

.progress {
    width:100%;
    height:10px;
    border:1px solid #ccc;
    margin:3px 0;
}
.bgpro {
    display:block;
    width:1%;
    background:green;
    height:10px;
    color:#fff;
}
js代码

<script type="text/javascript">
    $('input[name="pic"]').on('change',function() {
        if(typeof this.files == 'undefined'){
            return;
        }
        var img         = this.files[0];//获取图片信息
        var type         = img.type;//获取图片类型,判断使用
        var url         = getObjectURL(this.files[0]);//使用自定义函数,获取图片本地url
        var fd             = new FormData();//实例化表单,提交数据使用
        fd.append('img',img);//将img追加进去
        if(url)
            $('.pic_show').attr('src',url).show();//展示图片
        if(type.substr(0,5) != 'image'){//无效的类型过滤
            alert('非图片类型,无法上传!');
            return;
        }
        //开始ajax请求,后台用的tp
        $.ajax({
            type     : 'post',
            url     : '__URL__/upload_img',
            data     : fd,
            processData: false,  // tell jQuery not to process the data  ,这个是必须的,否则会报错
                        contentType: false,   // tell jQuery not to set contentType  
            dataType : 'text',
            xhr     : function() {//这个是重点,获取到原始的xhr对象,进而绑定upload.onprogress
                var xhr     = jQuery.ajaxSettings.xhr();
                xhr.upload.onprogress     = function(ev) {
                    //这边开始计算百分比
                    var parcent = 0;
                    if(ev.lengthComputable) {
                                        percent = 100 * ev.loaded / ev.total;
                                        percent = parseFloat(percent).toFixed(2);
                                    $('.bgpro').css('width',percent + '%').html(percent + '%');
                    }
                };
                return xhr;
            },
        });
        
    });

    //自定义获取图片路径函数
    function getObjectURL(file) {
        var url = null ; 
        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>

还可以进一步美化,比如说穿错了,可以做个ajax删除,重新传,相比来说就很easy了

获取到的数据:

image

参考网址:http://blog.csdn.net/a519640026/article/details/18090695

原文地址:https://www.cnblogs.com/lxdd/p/4070242.html