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 相关文章推荐
JavaScript小技巧 2.5 则
Sep 12 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
Jun 03 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 Javascript
详解webpack+ES6+Sass搭建多页面应用
Nov 05 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
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制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php实现encode64编码类实例
2015/03/24 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
javascript求日期差的方法
2016/03/02 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
对python中list的五种查找方法说明
2020/07/13 Python
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
2014年政风行风自查自纠报告
2014/10/21 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫