2.html 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>XMLHttpRequest上传文件</title>
  5. <script type="text/javascript">
  6. //图片上传
  7. var xhr;
  8. //上传文件方法
  9. function UpladFile() {
  10. var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
  11. // var url = "http://localhost:8081" + "/desks/upload"; // 接收上传文件的后台地址
  12. var url = "http://localhost:8081" + "/desks/importDesksByExcel"; // 接收上传文件的后台地址
  13. var form = new FormData(); // FormData 对象
  14. form.append("file", fileObj); // 文件对象
  15. xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
  16. xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
  17. xhr.onload = uploadComplete; //请求完成
  18. xhr.onerror = uploadFailed; //请求失败
  19. xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
  20. xhr.upload.onloadstart = function(){//上传开始执行方法
  21. ot = new Date().getTime(); //设置上传开始时间
  22. oloaded = 0;//设置上传开始时,以上传的文件大小为0
  23. };
  24. xhr.send(form); //开始上传,发送form数据
  25. }
  26. //上传成功响应
  27. function uploadComplete(evt) {
  28. //服务断接收完文件返回的结果
  29. alert(evt);
  30. var data = JSON.parse(evt.target.responseText);
  31. if(data.success) {
  32. alert("上传成功!");
  33. }else{
  34. alert("上传失败!2222");
  35. }
  36. }
  37. //上传失败
  38. function uploadFailed(evt) {
  39. alert("上传失败!111");
  40. }
  41. //取消上传
  42. function cancleUploadFile(){
  43. xhr.abort();
  44. }
  45. //上传进度实现方法,上传过程中会频繁调用该方法
  46. function progressFunction(evt) {
  47. var progressBar = document.getElementById("progressBar");
  48. var percentageDiv = document.getElementById("percentage");
  49. // event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0
  50. if (evt.lengthComputable) {//
  51. progressBar.max = evt.total;
  52. progressBar.value = evt.loaded;
  53. percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
  54. }
  55. var time = document.getElementById("time");
  56. var nt = new Date().getTime();//获取当前时间
  57. var pertime = (nt-ot)/1000; //计算出上次调用该方法时到现在的时间差,单位为s
  58. ot = new Date().getTime(); //重新赋值时间,用于下次计算
  59. var perload = evt.loaded - oloaded; //计算该分段上传的文件大小,单位b
  60. oloaded = evt.loaded;//重新赋值已上传文件大小,用以下次计算
  61. //上传速度计算
  62. var speed = perload/pertime;//单位b/s
  63. var bspeed = speed;
  64. var units = 'b/s';//单位名称
  65. if(speed/1024>1){
  66. speed = speed/1024;
  67. units = 'k/s';
  68. }
  69. if(speed/1024>1){
  70. speed = speed/1024;
  71. units = 'M/s';
  72. }
  73. speed = speed.toFixed(1);
  74. //剩余时间
  75. var resttime = ((evt.total-evt.loaded)/bspeed).toFixed(1);
  76. time.innerHTML = ',速度:'+speed+units+',剩余时间:'+resttime+'s';
  77. if(bspeed==0) time.innerHTML = '上传已取消';
  78. }
  79. </script>
  80. </head>
  81. <body>
  82. <progress id="progressBar" value="0" max="100" style="width: 300px;"></progress>
  83. <span id="percentage"></span><span id="time"></span>
  84. <br /><br />
  85. <input type="file" id="file" name="myfile" />
  86. <input type="button" onclick="UpladFile()" value="上传" />
  87. <input type="button" onclick="cancleUploadFile()" value="取消" />
  88. </body>
  89. </html>