原生js异步文件上传

;( 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.onchange= 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、付费专栏及课程。

余额充值