javascript实现简单多文件上传
该上传功能主要用到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实现简单多文件上传的更多相关文章
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- Django 实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...
- DVWA靶机--简单的文件上传漏洞
简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...
- Java实现一个简单的文件上传案例
Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...
- javascript插件uploadify简单实现文件上传
最近在学习mvc,需要用到文件上传的功能,找了很多的jquery插件,最后决定使用uploadify这个插件,参照了各位大神的博客,终于勉勉强强会用了.在此,做一下笔记,方便以后忘了查看. 首先在官网 ...
- 使用 JavaScript File API 实现文件上传
概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...
- java 网络编程之TCP通信和简单的文件上传功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- struts2中简单的文件上传
2016-08-31 一. 文件上传 利用commons-fileupload-1.2.1.jar实现简单的上传文件,首先在页面上填写表单,记得加上enctype="multip ...
随机推荐
- 2015年3月阿里内推(c++研发)实习生电面经历
2015年3月开学开始就听说阿里会有内推,果不其然在师兄的引荐下推了菜鸟网络,但是在学校的BBS上看到了阿里云部门,而且要会C++,这使我更感兴趣,重新选择了方向,当然最后选择了阿里云.在此分享一下三 ...
- Bootstrap使用后笔记
Bootstrap Modal 垂直居中 在 bootstrap.js中修改如下代码: Modal.prototype.adjustDialog = function () { var modal ...
- SharpPcap网络包捕获框架的使用--实例代码在vs2005调试通过
转自:http://hi.baidu.com/boyxgb/blog/item/89ac86fbdff5f82c4e4aea2e.html 由于项目的需要,要从终端与服务器的通讯数据中获取终端硬件状态 ...
- oneThink后台添加插件步骤详解
内容管理框架:oneThink 版本:V1.1.141212 (注:v1.1也有很多版本,一不小心就下到V1.1.140202 去了,还有其他版本,建议去代码托管平台下载最新版本) 我也不偷懒,把每一 ...
- 分享我的开源项目-springmore
之前有在博客园分享过springmore,不知道是什么原因,被管理员移除首页 在此郑重声明,这是我个人的开源项目,东西不多,也不存在打广告,也没有什么利益可图 完全是出于分享的目的,望博客园管理员予以 ...
- Advanced Office Password Recovery如何设置快捷方式
一般软件安装成功之后都会在桌面上形成快捷方式以方便使用,但是一些用户发现Advanced Office Password Recovery这种office密码破解工具安装成功后桌面上没有出现快捷方式, ...
- 教你一招:Excel中使用vlookup函数查询序列所对应的值
以一个简单的例子做示范,列数相对较少,看起来也比较清楚:在奥运会或其他比赛上我们可以看到各个国家的奖牌数的变化:那么我们如何查询国家对应的总奖牌数. 我们用到的函数是vlookup,它是一个纵向查询函 ...
- 解决: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 ...
- Angular指令渗透式理解
通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...
- Windows命令点滴
1.删除windows服务项目: C:\服务器软件\Redis>sc delete Redis6379 [SC] DeleteService 成功 2.用于私网的IP地址段: 10.0.0.0/ ...