如何使用 Ajax 实现上传图片时预览及上传进度效果

一、引言

  继上次实现文件上传功能后,产品经理又提出了新的需求:上传图片预览及进度条效果。本次就来搞定这个功能,这次开发基于上次的随笔,需要的小伙伴们自取 -- 如何使用Ajax实现简单的文件上传。

在绛县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、网站建设 网站设计制作按需网站设计,公司网站建设,企业网站建设,高端网站设计,成都全网营销,外贸网站建设,绛县网站建设费用合理。

二、了解原理

  要想实现文件预览效果,这里使用的是 FileReader 对象。使用它的 readAsDataURL 方法将图片内容转化为URL格式的Base64字符串,然后就可以在其onload事件中用src属性将图片渲染到页面进行预览了。

  要想实现文件上传进度效果,这里使用的是xhr(XMLHttpRequest)的 progress 事件。在此方法中我们可以获取到文件的总大小以及已经发送的大小,进而计算得到上传的百分比。

  理论存在,开始实践!

三、编码测试

  在上次的Demo基础上对页面进行了一些调整,代码如下:

<div>
    <inputid="upload" type="file" multiple style="display: none;" />
    <inputid="bt1" type="button" value="点击选择" />
    <inputid="bt2" type="button" value="打印对象" />
    <inputid="bt3" type="button" value="加载预览" />
    <inputid="bt4" type="button" value="开始上传" />
    <span>上传进度:span><spanid="prog">0%span>
    <br/>
    <divid="div1" style="height: 200px;">div>
div>

<scripttype="text/javascript">
    $(function () {

var upload= $("#upload");

        $("#bt1").on('click',function () {
            upload.click();
        });

        $("#bt2").on('click',function () {
            console.log(upload[0].files);
        });

        $("#bt3").on('click',function () {
var div= $("#div1");
for (var i= 0; i< upload[0].files.length; i++) {
var reader= new FileReader();
                reader.readAsDataURL(upload[0].files[i]);//依次读取图片
                reader.onload= function (e) {//读取完毕回调
                    var img= $("").attr('src', e.target.result);
                    div.append(img);//将其追加到页面上
                }
            }
        });

        $("#bt4").on('click',function () {
var formdata= new FormData();
for (var i= 0; i< upload[0].files.length; i++) {
                formdata.append('pic', upload[0].files[i]);
            }
            $.ajax({
                type:"post",
                url:"Default/Upload",
                data: formdata,
                contentType:false,
                processData:false,
                success:function (data) {
                    console.log("success!");
                },
                error:function () {
                    console.error("error!");
                },
                xhr:function () {
var myXhr= $.ajaxSettings.xhr();
if (myXhr.upload) {//检查upload属性是否存在
                        myXhr.upload.addEventListener('progress', progressHandlingFunction,false);//绑定progress事件的回调函数
                    }
return myXhr;//xhr对象返回给jQuery使用
                }
            });

function progressHandlingFunction(event) {
var loaded= Math.floor(100 * (event.loaded/ event.total));//计算已经上传的百分比
                $("#prog").html(loaded+ "%");//应用到显示UI,可根据自己需要修改
            }
        });
    })
script>

分享名称:如何使用 Ajax 实现上传图片时预览及上传进度效果
本文链接:http://scjbc.cn/article/dsojped.html

其他资讯