jQuery+ajax实现文件上传功能


Posted in jQuery onDecember 22, 2020

jQuery+ajax实现文件上传功能(显示文件上传进度),供大家参考,具体内容如下

具体实现步骤

1、定义UI结构,引入bootstrap的CSS文件和jQuery文件
2、给上传按钮绑定点击事件
3、验证是否选择了文件
4、向FormData中追加文件
5、使用ajax发起上传文件的请求
6、设置文件的路径
7、使用xhr获得文件上传的进度
8、当文件上传完成让进度条显示绿色

<style>
 #loading {
 width: 20px;
 height: 20px;
 }
 
 #img {
 display: block;
 width: 200px;
 height: 200px;
 border-radius: 50%;
 background-color: #abcdef;
 opacity: .5;
 }
</style>

<body>
 <!--multiple可以选择多个文件 -->
 <input type="file" multiple name="" id="ipt" multiple><button id="btn" type="submit">上传文件</button>
 <img id="loading" src="../img/loading.gif" alt="" style="display: none;">
 <!-- bootstrap中引入条件 -->
 <div class="progress" style="margin-top: 10px;width: 100px;margin-left: 10px;">
 <div id="progress" class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
 0%
 </div>
 </div>
 <!-- 显示上传到服务器的图片 -->
 <img src="" alt="" id="img" style="display: none;">
 <script src="../lib/jquery-1.11.0.min.js"></script>
 <script>
 $(function() {
 $('#btn').on('click', function() {
 // 获取文件列表
 var file = $('#ipt')[0].files
  // 判断是否选择了文件
 if (file.length <= 0) {
  return alert('请上传文件')
 }
 // 创建formdata
 var fd = new FormData()
  // 向formdata中传入数据
  // fd.append()
  // file是一个伪数组
 fd.append('avatar', file[0])
  // 用ajax传送数据
 $.ajax({
  type: 'post',
  url: 'http://www.liulongbin.top:3006/api/upload/avatar',
  // 数据不需要编码
  contentType: false,
  // 数据对象不需要转换成键值对格式
  processData: false,
  data: fd,
  beforeSend: function() {
  $('#loading').show()
  },
  complete: function() {
  $('#loading').hide()
  },
  success: function(res) {
  // 判断是否接收成功
  if (res.status !== 200) {
  return alert(reg.msg)
  }
  $('#img').attr('src', 'http://www.liulongbin.top:3006' + res['url']).css('display', 'block')

  },
  xhr: function xhr() {
  var xhr = new XMLHttpRequest()
  // 获取文件上传的进度
  xhr.upload.onprogress = function(e) {
  // e.lengthComputable表示当前的进度是否是可以计算,返回布尔值
  if (e.lengthComputable) {
   // e.loaded表示下载了多少数据, e.total表示数据总量
   var percentComplete = Math.ceil((e.loaded / e.total) * 100)
   // 让进度条的宽度变化
   $('#progress').css('width', percentComplete)
   // 在进度条中显示百分比
   $('#progress').html(percentComplete + 'px')
  }
  }
  // 文件加载完成
  xhr.upload.onload = function() {
  $('#progress').removeClass('progress-bar progress-bar-striped').addClass('progress-bar progress-bar-success')
  }
  return xhr
  }

 })

 })

 })
 </script>
</body>

效果演示(slow3g状态)

jQuery+ajax实现文件上传功能

jQuery+ajax实现文件上传功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
基于jQuery的表单填充实例
Aug 22 jQuery
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
Jul 25 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
jquery实现弹窗(系统提示框)效果
Dec 10 jQuery
jquery实现上传文件进度条
Mar 26 jQuery
jQuery实现简单飞机大战
Jul 05 jQuery
jQuery实现动态向上滚动
Dec 21 #jQuery
Jquery+javascript实现支付网页数字键盘
Dec 21 #jQuery
jquery实现淡入淡出轮播图效果
Dec 13 #jQuery
jquery实现拖拽小方块效果
Dec 10 #jQuery
jQuery实现简单弹幕制作
Dec 10 #jQuery
JQuery绑定事件四种实现方法解析
Dec 02 #jQuery
jquery实现拖拽添加元素功能
Dec 01 #jQuery
You might like
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
初识Laravel
2014/10/30 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
python绘制双柱形图代码实例
2017/12/14 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python连接mongodb密码认证实例
2018/10/16 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Django 路由控制的实现
2019/07/17 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
关于逃课的检讨书
2014/01/23 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
教师求职自荐信范文
2015/03/04 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS