该上传功能主要用到html5新属性FormData,通过XMLHttpRequest对象send到服务器,支持文件多选和多次选择、文件去重、移除已选文件等

1、html代码

  1. <div class="formtitle upLoad">附件上传</div>
  2. <div class="chooseFile" style="height: auto;">
  3. <input type="button" id="uploadbtn" value="选择文件..." /><input type="button" id="uploadfile" style="display: none;" value="上传文件" />
  4. <input type="file" id="uploadpicker" accept="" style="display: none;" multiple />
  5. <div>
  6. <ul id="checkfileList"></ul>
  7. </div>
  8. </div>

  

2、javascript 代码

  1. var selectedFileList = [];//已选文件列表
  2. var paramTaskId = "";//请求参数
  3. var succsessCount = 0;//上传成功文件个数
  4. var errorCount = 0;//上传失败文件个数
  5. $(function () {
  6. $("#uploadbtn").bind("click", function (e) {
  7. $("#uploadpicker").click();
  8. });
  9. $("#uploadpicker").bind("change", function () {//绑定文件选择事件
  10. var files = $("#uploadpicker").prop("files");
  11. $.each(files, function (index, item) {
  12. var choiseFile = $("#checkfileList>li");
  13. if (choiseFile.length > 0) {//文件去重
  14. var count = 0;
  15. $.each(choiseFile, function (index1, item1) {
  16. if (item.name == item1.innerText) {
  17. count++;
  18. }
  19. });
  20. if (count == 0) {
  21. if (checkFileLength(item.size)) {
  22. $("#checkfileList").append("<li class=\"fileinfo\">" + item.name + "<a style=\"display: none; color: red; margin-left: 10px;\" href=\"javascript:void(0)\" onclick=\"RemoveFile(this)\">删除</a>" + "</li>");
  23. selectedFileList.push(item);
  24. AddMoushover();
  25. }
  26. }
  27. } else {
  28. if (checkFileLength(item.size)) {
  29. $("#checkfileList").append("<li class=\"fileinfo\">" + item.name + "<a style=\"display: none; color: red; margin-left: 10px;\" href=\"javascript:void(0)\" onclick=\"RemoveFile(this)\">删除</a>" + "</li>");
  30. selectedFileList.push(item);
  31. AddMoushover();
  32. }
  33. }
  34. });
  35. });
  36. AddMoushover();
  37. });
  38. //判断文件是否超过限制大小
  39. function checkFileLength(fileLen) {
  40. if (fileLen > 4194304) {
  41. $.messager.alert("提示", "上传文件大小不能超过4M","error");
  42. return false;
  43. }
  44. return true;
  45. }
  46. //上传文件
  47. function uploadFile() {
  48. if (selectedFileList.length>0) {
  49. $.messager.progress({
  50. title: "提示",
  51. msg: "文件上传中..."
  52. });
  53. $.each(selectedFileList, function (index, item) {
  54. debugger;
  55. var dataform = new FormData();
  56. dataform.append("file", item);
  57. var xmlhttp = null;
  58. if (window.XMLHttpRequest) {// code for all new browsers
  59. xmlhttp = new XMLHttpRequest();
  60. }
  61. else if (window.ActiveXObject) {// code for IE5 and IE6
  62. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  63. }
  64. if (xmlhttp != null) {
  65. xmlhttp.open("POST", "/Project/ProjectTask/SaveFiles?TaskId=" + paramTaskId, true);
  66. xmlhttp.send(dataform);
  67. xmlhttp.onreadystatechange = callbackMethods;
  68. } else {
  69. alert("你的浏览器版本不兼容,请使用更高版本的浏览器");
  70. }
    //请求回调函数
  71. function callbackMethods() {
  72. debugger;
  73. if (xmlhttp.readyState == 4) {
  74. if (xmlhttp.status == 200) {
  75. succsessCount++;
  76. if ((succsessCount + errorCount) == selectedFileList.length) {
  77. if (errorCount > 0) {
  78. $.messager.alert("提示", "上传文件完成," + errorCount + "个文件由于过大上传失败。", "error");
  79. }
  80. submitSuccess();
  81. }
  82. } else {
  83. if (xmlhttp.status==500) {
  84. errorCount++;
  85. if ((succsessCount + errorCount) == selectedFileList.length) {
  86. if (errorCount>0) {
  87. $.messager.alert("提示", "上传文件完成,"+errorCount+"个文件由于过大上传失败。", "error");
  88. }
  89. submitSuccess();
  90. }
  91. }
  92. }
  93. }
  94. }
  95. });
  96.  
  97. } else {
  98. submitSuccess();
  99. }
  100. }
  101. //移除已选择的文件
  102. function RemoveFile(obj) {
  103. $.messager.confirm("提示", "确认删除当前文件?", function(e) {
  104. if (e) {
  105. var index = $("#checkfileList>li").index($(obj).parent());
  106. selectedFileList.splice(index, 1);
  107. $(obj).parent().remove();
  108. }
  109. });
  110. }
    //添加鼠标经过事件,鼠标划过时显示“删除”
  111. function AddMoushover() {
  112. $(".fileinfo").hover(function () {
  113. $(this).find("a").last().css("display", "");
  114. }, function () {
  115. $(this).find("a").last().css("display", "none");
  116. });
  117. }

  3、图片展示

javascript实现简单多文件上传的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  3. Django 实现简单的文件上传

    今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...

  4. DVWA靶机--简单的文件上传漏洞

    简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...

  5. Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...

  6. javascript插件uploadify简单实现文件上传

    最近在学习mvc,需要用到文件上传的功能,找了很多的jquery插件,最后决定使用uploadify这个插件,参照了各位大神的博客,终于勉勉强强会用了.在此,做一下笔记,方便以后忘了查看. 首先在官网 ...

  7. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  8. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. struts2中简单的文件上传

    2016-08-31 一.       文件上传 利用commons-fileupload-1.2.1.jar实现简单的上传文件,首先在页面上填写表单,记得加上enctype="multip ...

随机推荐

  1. 2015年3月阿里内推(c++研发)实习生电面经历

    2015年3月开学开始就听说阿里会有内推,果不其然在师兄的引荐下推了菜鸟网络,但是在学校的BBS上看到了阿里云部门,而且要会C++,这使我更感兴趣,重新选择了方向,当然最后选择了阿里云.在此分享一下三 ...

  2. Bootstrap使用后笔记

      Bootstrap Modal 垂直居中 在 bootstrap.js中修改如下代码: Modal.prototype.adjustDialog = function () { var modal ...

  3. SharpPcap网络包捕获框架的使用--实例代码在vs2005调试通过

    转自:http://hi.baidu.com/boyxgb/blog/item/89ac86fbdff5f82c4e4aea2e.html 由于项目的需要,要从终端与服务器的通讯数据中获取终端硬件状态 ...

  4. oneThink后台添加插件步骤详解

    内容管理框架:oneThink 版本:V1.1.141212 (注:v1.1也有很多版本,一不小心就下到V1.1.140202 去了,还有其他版本,建议去代码托管平台下载最新版本) 我也不偷懒,把每一 ...

  5. 分享我的开源项目-springmore

    之前有在博客园分享过springmore,不知道是什么原因,被管理员移除首页 在此郑重声明,这是我个人的开源项目,东西不多,也不存在打广告,也没有什么利益可图 完全是出于分享的目的,望博客园管理员予以 ...

  6. Advanced Office Password Recovery如何设置快捷方式

    一般软件安装成功之后都会在桌面上形成快捷方式以方便使用,但是一些用户发现Advanced Office Password Recovery这种office密码破解工具安装成功后桌面上没有出现快捷方式, ...

  7. 教你一招:Excel中使用vlookup函数查询序列所对应的值

    以一个简单的例子做示范,列数相对较少,看起来也比较清楚:在奥运会或其他比赛上我们可以看到各个国家的奖牌数的变化:那么我们如何查询国家对应的总奖牌数. 我们用到的函数是vlookup,它是一个纵向查询函 ...

  8. 解决:Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle

    同步cm12.1初始化出现的问题: fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle fatal: err ...

  9. Angular指令渗透式理解

    通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...

  10. Windows命令点滴

    1.删除windows服务项目: C:\服务器软件\Redis>sc delete Redis6379 [SC] DeleteService 成功 2.用于私网的IP地址段: 10.0.0.0/ ...