实时计算上传文件的进度

(function(window,document){

    var myUpload = function(option) {

        var file,

            fd = new FormData(),

            xhr = new XMLHttpRequest(),

            loaded, tot, per, uploadUrl,input;

 

        input = document.createElement("input");

        input.setAttribute('id',"myUpload-input");

        input.setAttribute('type',"file");

        input.setAttribute('name',"files");

 

        input.click();

 

        uploadUrl = option.uploadUrl;

        callback = option.callback;

        uploading = option.uploading;

        beforeSend = option.beforeSend;

 

        input.οnchange= function(){

            file = input.files[0];

            if(beforeSend instanceof Function){

                if(beforeSend(file) === false){

                    return false;

                }

            }

             

            fd.append("files", file);

 

            xhr.onreadystatechange = function() {

                if (xhr.readyState == 4 && xhr.status == 200) {

                    if(callback instanceof Function){

                        callback(xhr.responseText);

                    }

                }

            }

 

            //侦查当前附件上传情况

            xhr.upload.onprogress = function(evt) {

                loaded = evt.loaded;

                tot = evt.total;

                per = Math.floor(100 * loaded / tot); //已经上传的百分比

                if(uploading instanceof Function){

                    uploading(per);

                }

            };

 

            xhr.open("post", uploadUrl);

            xhr.send(fd);

        }

    };

 

    window.myUpload = myUpload;

})(window,document);

 

//用法

//触发文件上传事件

myUpload({

    //上传文件接收地址

    uploadUrl: "/async/myUpload.php",

    //选择文件后,发送文件前自定义事件

    //file为上传的文件信息,可在此处做文件检测、初始化进度条等动作

    beforeSend: function(file) {

 

    },

    //文件上传完成后回调函数

    //res为文件上传信息

    callback: function(res) {

 

    },

    //返回上传过程中包括上传进度的相关信息

    //详细请看res,可在此加入进度条相关代码

    uploading: function(res) {

 

    }

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值