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实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
基于jQuery实现瀑布流页面
Apr 11 jQuery
jQuery返回定位插件详解
May 15 jQuery
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 jQuery
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
jquery自定义显示消息数量
Dec 19 jQuery
jquery拖拽自动排序插件使用方法详解
Jul 20 jQuery
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 jQuery
jQuery zTree插件使用简单教程
Aug 16 jQuery
jquery实现穿梭框功能
Jan 19 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
PHP获取MAC地址的函数代码
2011/09/11 PHP
基于php下载文件的详解
2013/06/02 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python中防止sql注入的方法详解
2017/02/25 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python的形参和实参使用方式
2019/12/24 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
财务管理专业毕业生求职信
2014/06/02 职场文书
签订劳动合同通知书
2015/04/16 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js