index_tem.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>XMLHttpRequest上传文件</title>
  6. <script type="text/javascript">
  7. //图片上传
  8. var xhr;
  9. //上传文件方法
  10. function UpladFile() {
  11. var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
  12. var url = "http://localhost:8080" + "/generalReportTemplate"; // 接收上传文件的后台地址
  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. var data = JSON.parse(evt.target.responseText);
  30. if (data.success) {
  31. alert("上传成功!");
  32. } else {
  33. alert("上传失败!");
  34. }
  35. }
  36. //上传失败
  37. function uploadFailed(evt) {
  38. alert("上传失败!");
  39. }
  40. //取消上传
  41. function cancleUploadFile() {
  42. xhr.abort();
  43. }
  44. //上传进度实现方法,上传过程中会频繁调用该方法
  45. function progressFunction(evt) {
  46. var progressBar = document.getElementById("progressBar");
  47. var percentageDiv = document.getElementById("percentage");
  48. // event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0
  49. if (evt.lengthComputable) {//
  50. progressBar.max = evt.total;
  51. progressBar.value = evt.loaded;
  52. percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
  53. }
  54. var time = document.getElementById("time");
  55. var nt = new Date().getTime();//获取当前时间
  56. var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差,单位为s
  57. ot = new Date().getTime(); //重新赋值时间,用于下次计算
  58. var perload = evt.loaded - oloaded; //计算该分段上传的文件大小,单位b
  59. oloaded = evt.loaded;//重新赋值已上传文件大小,用以下次计算
  60. //上传速度计算
  61. var speed = perload / pertime;//单位b/s
  62. var bspeed = speed;
  63. var units = 'b/s';//单位名称
  64. if (speed / 1024 > 1) {
  65. speed = speed / 1024;
  66. units = 'k/s';
  67. }
  68. if (speed / 1024 > 1) {
  69. speed = speed / 1024;
  70. units = 'M/s';
  71. }
  72. speed = speed.toFixed(1);
  73. //剩余时间
  74. var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
  75. time.innerHTML = ',速度:' + speed + units + ',剩余时间:' + resttime + 's';
  76. if (bspeed == 0) time.innerHTML = '上传已取消';
  77. }
  78. </script>
  79. </head>
  80. <body>
  81. <progress id="progressBar" value="0" max="100" style="width: 300px;"></progress>
  82. <span id="percentage"></span><span id="time"></span>
  83. <br/><br/>
  84. <input type="file" id="file" name="myfile"/>
  85. <input type="button" onclick="UpladFile()" value="上传"/>
  86. <input type="button" onclick="cancleUploadFile()" value="取消"/>
  87. </body>
  88. </html>