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 相关文章推荐
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
JavaScript中eval()函数用法详解
Dec 14 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
jQuery实现的简单前端搜索功能示例
Oct 28 jQuery
浅谈Vue网络请求之interceptors实际应用
Feb 28 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
Aug 07 Javascript
json前后端数据交互相关代码
Sep 19 Javascript
微信公众平台获取access_token的方法步骤
Mar 29 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
Aug 26 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
Sep 11 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执行linux命令常用函数汇总
2016/02/02 PHP
初识JQuery 实例一(first)
2011/03/16 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
九种原生js动画效果
2015/11/11 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
仿京东快报向上滚动的实例
2017/12/13 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python脚本内运行linux命令的方法
2015/07/02 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python实现的计数排序算法示例
2017/11/29 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python对象与引用的介绍
2019/01/24 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python缓存技术实现过程详解
2019/09/25 Python
Python下载的11种姿势(小结)
2020/11/18 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
学校后勤岗位职责
2014/02/19 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
超市店庆活动方案
2014/08/31 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技