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 相关文章推荐
基于jquery的页面划词搜索JS
Sep 14 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
Javascript数组的排序 sort()方法和reverse()方法
Jun 04 Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
AngularJS 事件发布机制
Aug 28 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
vue.js实现备忘录demo
Jun 26 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
javascript实现导航栏分页效果
2019/06/27 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
通报表扬范文
2015/01/17 职场文书
会议营销主持词
2015/07/03 职场文书
话题作文之自信作文
2019/11/15 职场文书
Jsonp劫持学习
2021/04/01 PHP
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS