js实现文件上传功能 后台使用MultipartFile


Posted in Javascript onSeptember 08, 2018

本文为大家分享了js实现文件上传功能的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>XMLHttpRequest上传文件</title>
  <script type="text/javascript">
    //图片上传
    var xhr;
    //上传文件方法
    function UpladFile() {
      var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
      var url = "http://localhost:8080" + "/api/attachment/upload"; // 接收上传文件的后台地址
 
      var form = new FormData(); // FormData 对象
      form.append("file", fileObj); // 文件对象
 
      xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
      xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
      xhr.onload = uploadComplete; //请求完成
      xhr.onerror = uploadFailed; //请求失败
 
      xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
      xhr.upload.onloadstart = function(){//上传开始执行方法
        ot = new Date().getTime();  //设置上传开始时间
        oloaded = 0;//设置上传开始时,以上传的文件大小为0
      };
 
      xhr.send(form); //开始上传,发送form数据
    }
 
    //上传成功响应
    function uploadComplete(evt) {
      //服务断接收完文件返回的结果
 
      var data = JSON.parse(evt.target.responseText);
      if(data.success) {
        alert("上传成功!");
      }else{
        alert("上传失败!");
      }
 
    }
    //上传失败
    function uploadFailed(evt) {
      alert("上传失败!");
    }
    //取消上传
    function cancleUploadFile(){
      xhr.abort();
    }
 
 
    //上传进度实现方法,上传过程中会频繁调用该方法
    function progressFunction(evt) {
      var progressBar = document.getElementById("progressBar");
      var percentageDiv = 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) + "%";
      }
      var time = document.getElementById("time");
      var nt = new Date().getTime();//获取当前时间
      var pertime = (nt-ot)/1000; //计算出上次调用该方法时到现在的时间差,单位为s
      ot = new Date().getTime(); //重新赋值时间,用于下次计算
      var perload = evt.loaded - oloaded; //计算该分段上传的文件大小,单位b
      oloaded = evt.loaded;//重新赋值已上传文件大小,用以下次计算
      //上传速度计算
      var speed = perload/pertime;//单位b/s
      var bspeed = speed;
      var units = '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);
      //剩余时间
      var resttime = ((evt.total-evt.loaded)/bspeed).toFixed(1);
      time.innerHTML = ',速度:'+speed+units+',剩余时间:'+resttime+'s';
      if(bspeed==0) time.innerHTML = '上传已取消';
    }
  </script>
</head>
<body>
<progress id="progressBar" value="0" max="100" style="width: 300px;"></progress>
<span id="percentage"></span><span id="time"></span>
<br /><br />
<input type="file" id="file" name="myfile" />
<input type="button" onclick="UpladFile()" value="上传" />
<input type="button" onclick="cancleUploadFile()" value="取消" />
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
通过jQuery源码学习javascript(二)
Dec 27 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
May 03 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 23 Javascript
基于axios 的responseType类型的设置方法
Oct 29 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
vue-router的HTML5 History 模式设置
Sep 08 #Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 #Javascript
react 父子组件之间通讯props
Sep 08 #Javascript
js代码规范之Eslint安装与配置详解
Sep 08 #Javascript
vue弹窗插件实战代码
Sep 08 #Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 #Javascript
详解Webpack-dev-server的proxy用法
Sep 08 #Javascript
You might like
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python3.5 tkinter实现页面跳转
2018/01/30 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Django框架模板的使用方法示例
2019/05/25 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
Python configparser模块应用过程解析
2020/08/14 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
丧事主持词大全
2014/04/02 职场文书
自信主题班会
2015/08/14 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
Nginx四层负载均衡的配置指南
2021/06/11 Servers
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js