file js new 传到后台_纯js实现最简单的文件上传(后台使用MultipartFile)

本文介绍了一个使用XMLHttpRequest实现的文件上传功能,包括上传文件的方法、进度条显示、速度及剩余时间计算等。提供了完整的JavaScript代码示例。
XMLHttpRequest上传文件

//图片上传

varxhr;//上传文件方法

functionUpladFile() {varfileObj=document.getElementById("file").files[0];//js 获取文件对象

varurl= "http://localhost:8080" + "/api/attachment/upload";//接收上传文件的后台地址

varform= newFormData();//FormData 对象

form.append("file", fileObj);//文件对象

xhr= newXMLHttpRequest();//XMLHttpRequest 对象

xhr.open("post", url,true);//post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。

xhr.onload=uploadComplete;//请求完成

xhr.onerror=uploadFailed;//请求失败

xhr.upload.onprogress=progressFunction;//【上传进度调用方法实现】

xhr.upload.onloadstart= function(){//上传开始执行方法

ot= newDate().getTime();//设置上传开始时间

oloaded= 0;//设置上传开始时,以上传的文件大小为0

};

xhr.send(form);//开始上传,发送form数据

}//上传成功响应

functionuploadComplete(evt) {//服务断接收完文件返回的结果

vardata=JSON.parse(evt.target.responseText);if(data.success) {

alert("上传成功!");

}else{

alert("上传失败!");

}

}//上传失败

functionuploadFailed(evt) {

alert("上传失败!");

}//取消上传

functioncancleUploadFile(){

xhr.abort();

}//上传进度实现方法,上传过程中会频繁调用该方法

functionprogressFunction(evt) {varprogressBar=document.getElementById("progressBar");varpercentageDiv=document.getElementById("percentage");//event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0

if(evt.lengthComputable) {//progressBar.max=evt.total;

progressBar.value=evt.loaded;

percentageDiv.innerHTML=Math.round(evt.loaded/evt.total* 100)+ "%";

}vartime=document.getElementById("time");varnt= newDate().getTime();//获取当前时间

varpertime=(nt-ot)/1000;//计算出上次调用该方法时到现在的时间差,单位为s

ot= newDate().getTime();//重新赋值时间,用于下次计算

varperload=evt.loaded-oloaded;//计算该分段上传的文件大小,单位b

oloaded=evt.loaded;//重新赋值已上传文件大小,用以下次计算

//上传速度计算

varspeed=perload/pertime;//单位b/svarbspeed=speed;varunits= 'b/s';//单位名称

if(speed/1024>1){

speed=speed/1024;

units= 'k/s';

}if(speed/1024>1){

speed=speed/1024;

units= 'M/s';

}

speed=speed.toFixed(1);//剩余时间

varresttime=((evt.total-evt.loaded)/bspeed).toFixed(1);

time.innerHTML= ',速度:'+speed+units+',剩余时间:'+resttime+'s';if(bspeed==0) time.innerHTML= '上传已取消';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值