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 相关文章推荐
一个js写的日历(代码部分网摘)
Sep 20 Javascript
WEB 浏览器兼容 推荐收藏
May 14 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
May 13 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
Jun 21 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
Oct 19 Javascript
jquery拼接ajax 的json和字符串拼接的方法
Mar 11 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
JavaScript实现移动端带transition动画的轮播效果
Mar 24 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实现Socket服务器的代码
2008/04/03 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
浅析Python基础-流程控制
2016/03/18 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
通过实例学习Python Excel操作
2020/01/06 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
探亲假请假条
2014/04/11 职场文书
图书馆标语
2014/06/19 职场文书
给病人的慰问信
2015/03/23 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
解析python中的jsonpath 提取器
2022/01/18 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL