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

1、html代码

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

  

2、javascript 代码

    var selectedFileList = [];//已选文件列表
var paramTaskId = "";//请求参数
var succsessCount = 0;//上传成功文件个数
var errorCount = 0;//上传失败文件个数
$(function () {
$("#uploadbtn").bind("click", function (e) {
$("#uploadpicker").click();
});
$("#uploadpicker").bind("change", function () {//绑定文件选择事件
var files = $("#uploadpicker").prop("files");
$.each(files, function (index, item) {
var choiseFile = $("#checkfileList>li");
if (choiseFile.length > 0) {//文件去重
var count = 0;
$.each(choiseFile, function (index1, item1) {
if (item.name == item1.innerText) {
count++;
}
});
if (count == 0) {
if (checkFileLength(item.size)) {
$("#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>");
selectedFileList.push(item);
AddMoushover();
}
}
} else {
if (checkFileLength(item.size)) {
$("#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>");
selectedFileList.push(item);
AddMoushover();
}
}
});
});
AddMoushover();
});
//判断文件是否超过限制大小
function checkFileLength(fileLen) {
if (fileLen > 4194304) {
$.messager.alert("提示", "上传文件大小不能超过4M","error");
return false;
}
return true;
}
//上传文件
function uploadFile() {
if (selectedFileList.length>0) {
$.messager.progress({
title: "提示",
msg: "文件上传中..."
});
$.each(selectedFileList, function (index, item) {
debugger;
var dataform = new FormData();
dataform.append("file", item);
var xmlhttp = null;
if (window.XMLHttpRequest) {// code for all new browsers
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) {// code for IE5 and IE6
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp != null) {
xmlhttp.open("POST", "/Project/ProjectTask/SaveFiles?TaskId=" + paramTaskId, true);
xmlhttp.send(dataform);
xmlhttp.onreadystatechange = callbackMethods;
} else {
alert("你的浏览器版本不兼容,请使用更高版本的浏览器");
}
//请求回调函数
function callbackMethods() {
debugger;
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
succsessCount++;
if ((succsessCount + errorCount) == selectedFileList.length) {
if (errorCount > 0) {
$.messager.alert("提示", "上传文件完成," + errorCount + "个文件由于过大上传失败。", "error");
}
submitSuccess();
}
} else {
if (xmlhttp.status==500) {
errorCount++;
if ((succsessCount + errorCount) == selectedFileList.length) {
if (errorCount>0) {
$.messager.alert("提示", "上传文件完成,"+errorCount+"个文件由于过大上传失败。", "error");
}
submitSuccess();
}
}
}
}
}
}); } else {
submitSuccess();
}
}
//移除已选择的文件
function RemoveFile(obj) {
$.messager.confirm("提示", "确认删除当前文件?", function(e) {
if (e) {
var index = $("#checkfileList>li").index($(obj).parent());
selectedFileList.splice(index, 1);
$(obj).parent().remove();
}
});
}
//添加鼠标经过事件,鼠标划过时显示“删除”
function AddMoushover() {
$(".fileinfo").hover(function () {
$(this).find("a").last().css("display", "");
}, function () {
$(this).find("a").last().css("display", "none");
});
}

  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. sql server cross/outer apply 用法

    这是 sql server 帮助文档关于apply的描述: 使用 APPLY 运算符(2005或以上版本)可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为 ...

  2. socketAPI:一个最简单的服务器和对应的客户端C语言的实现

    基于linux,该实例实现了服务端传了一个hello world给客户端.socket()创建socketbind()绑定socket到IP地址和端口listen()服务器监听客户端的连接connec ...

  3. myeclipse 2014 除了 默认加载的derby

    myeclipse 2014 去掉 默认加载的derby作为有轻微强迫症的我来说,server下面有一个我始终用不到的东西我是很不舒服的.最终我网查到解决办法,现在分享给大家.============ ...

  4. php根据地址的经纬度查询周围的城市例子

    目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的.还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据.现 ...

  5. 【USACO 2.4】Fractions to Decimals(分数转小数)

    题意:给你N/D的分数,让你输出等价的小数,如果是循环小数,用括号把循环节包起来.如果是整数,后面保留一位小数.每行最多输出76个字符. 题解:模拟除法,如果余数是第二次出现,则代表第一次出现的位置到 ...

  6. 【USACO 2.3】Controlling Companies (递推)

    题意:A公司对B公司有控制权的条件是满足下面条件之一:A=B,A对B的股份超过50%,A控制的公司对B的股份之和超过50%. 分析:我把控制关系分个等级:第一级是直接的股份超过50%,第二级是至少需要 ...

  7. Oracle之分页查询

    select * from ( select a.*, rownum rn from (select * from table_name) a where rownum<= 40 ) where ...

  8. iOS多线程的详情使用示例--简进祥

    大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...

  9. bzoj2091【Poi2010】The Minima Game

    直接dp就好了 每个人肯定会去选最大的,用dp[i]表示选了后i个点时先手-后手的最大值(因为从后往前扫才好转移啊 QwQ~) dp[i]=max(c[j]-dp[j-1]),(j<=i) 直接 ...

  10. Leetcode 255. Verify Preorder Sequence in Binary Search Tree

    验证一个list是不是一个BST的preorder traversal sequence. Given an array of numbers, verify whether it is the co ...