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动态增加删除表格行的小例子
Nov 14 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
easyui简介_动力节点Java学院整理
Jul 14 Javascript
Vue中的混入的使用(vue mixins)
Jun 01 Javascript
vue中使用protobuf的过程记录
Oct 26 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
vue 获取视频时长的实例代码
Aug 20 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
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下目前为目最全的CURL中文说明
2010/08/01 PHP
php文件上传的简单实例
2013/10/19 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
巧用canvas
2017/01/21 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python数据化运营的重要意义
2019/11/25 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
校长就职演讲稿
2014/01/06 职场文书
集团薪酬管理制度
2014/01/13 职场文书
村官学习十八大感想
2014/01/15 职场文书
财会专业大学生求职信
2014/09/26 职场文书
2014年电工工作总结
2014/11/20 职场文书
学生检讨书
2015/01/27 职场文书
2015年采购部工作总结
2015/04/23 职场文书
监护人证明
2015/06/19 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
Django实现聊天机器人
2021/05/31 Python