框架是采用的easyui,这个是带单点选择的上传,支持IE8,需要的友友可以自行修改,上传成功自动关闭串口
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<div style="padding:5px;">
<form method="post" enctype="multipart/form-data">
<div>
<table class="form-table">
<tr height="50" valign="middle">
<td width="98%">
<input type="radio" name="dataType" value="asset"/>哈哈1
<input type="radio" name="dataType" value="prop"/>哈哈2
<input type="radio" name="dataType" value="tree"/>哈哈3
<input type="radio" name="dataType" value="geometry"/>哈哈4
</td>
</tr>
</table>
</div>
<input type="hidden" id="contextPath" value="<%=request.getContextPath() %>"/>
<div id="swfupload">
<span id="spanButtonPlaceholder"></span><div id="divFileCount"></div>
<p id="queueStatus"></p>
<ol id="logList"></ol>
</div>
</form>
</div>
<script type="text/javascript" src="<spring:url value="/_js/swfupload/swfupload.js"/>"></script>
<script type="text/javascript" src="<spring:url value="/_js/swfupload/swfupload.queue.js"/>"></script>
<script type="text/javascript">
var contextPath = $("#contextPath").val();
var fileTotal; // 加入队列的文件总数
var queueErrorArray;
var swfu;
var settings = {
upload_url: "/upload;jsessionid=${pageContext.session.id}",
flash_url: "<spring:url value="/_js/swfupload/swfupload.swf"/>",
file_post_name: 'Filedata',
use_query_string: true,
post_params: {},
//file_size_limit:"100 MB",
file_types:"*.csv;*.txt",
file_types_description: "All Files",
//file_size_limit: '102400',
file_upload_limit: 30,
file_queue_limit: 60,
// handlers
file_dialog_start_handler: fileDialogStart,
file_queued_handler: fileQueued,
file_queue_error_handler: fileQueueError,
file_dialog_complete_handler: fileDialogComplete,
upload_start_handler: uploadStart,
upload_progress_handler: uploadProgress,
upload_success_handler: uploadSuccess,
upload_error_handler: uploadError,
upload_complete_handler: uploadComplete,
queue_complete_handler:uploadQueueComplete,
button_placeholder_id: 'spanButtonPlaceholder',
button_image_url: "<spring:url value="/_js/swfupload/XPButtonUploadText.png"/>",
button_width: "80",
button_height: "29",
button_text: '<span class="theFont"></span>',
button_text_style: ".theFont { font-size: 16; }",
button_text_left_padding: 12,
button_text_top_padding: 3,
button_cursor: SWFUpload.CURSOR.HAND,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
debug: false,
custom_settings: {}
};
$(function () {
swfu = new SWFUpload(settings);
});
//======================================== 回调函数Handlers ===================================
/**
* 打开文件选择对话框时响应
*/
function fileDialogStart() {
if (queueErrorArray) {
queueErrorArray = null;
}
}
/**
* 文件被加入上传队列时的回调函数,增加文件信息到列表并自动开始上传.<br />
* <p></p>
* SWFUpload.startUpload(file_id)方法导致指定文件开始上传,
* 如果参数为空,则默认上传队列第一个文件;<br />
* SWFUpload.cancelUpload(file_id,trigger_error_event)取消指定文件上传并从队列删除,
* 如果file_id为空,则删除队列第一个文件,trigger_error_event表示是否触发uploadError事件.
* @param file 加入队列的文件
*/
function fileQueued(file) {
var swfUpload = swfu;
var dataType = $('input[name="dataType"]:checked').val();
if(dataType == undefined)
{
swfu.cancelQueue();
return;
}
var listItem = '<li id="' + file.id + '">';
listItem += '文件:<em>' + file.name + '</em>(' + Math.round(file.size / 1024) + ' KB)';
listItem += '<span class="progressValue"></span>'
+ '<div class="progressBar"><div class="progress"></div></div>'
+ '<p class="status" >Pending</p>'
+ '<span class="cancel" > </span>'
+ '</li>';
$("#logList").append(listItem);
$("li#" + file.id + " .cancel").click(function (e) {
swfUpload.cancelUpload(file.id, false);
var stats = swfUpload.getStats();
swfUpload.setStats({successful_uploads: (stats.successful_uploads - 1)});
$("#" + file.id).remove();
$("li#" + file.id).slideUp('fast');
})
}
/**
* 文件加入上传队列失败时触发,触发原因包括:<br />
* 文件大小超出限制<br />
* 文件类型不符合<br />
* 上传队列数量限制超出等.
* @param file 当前文件
* @param errorCode 错误代码(参考SWFUpload.QUEUE_ERROR常量)
* @param message 错误信息
*/
function fileQueueError(file, errorCode, message) {
if (!queueErrorArray) {
queueErrorArray = [];
}
var errorFile = {
file: file,
code: errorCode,
error: ''
};
switch (errorCode) {
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
alert(file.name + ': 文件大小超出限制.');
break;
case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
alert(file.name + ': 文件类型受限.');
break;
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
alert(file.name + ': 文件为空文件.');
break;
case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
alert('超出文件数量限制.');
break;
default:
alert(file.name + ': 加载入队列出错.');
break;
}
queueErrorArray.push(errorFile);
}
/**
* 选择文件对话框关闭时触发,报告所选文件个数、加入上传队列文件数及上传队列文件总数
* @param numSelected 选择的文件数目
* @param numQueued 加入队列的文件数目
* @param numTotalInQueued 上传文件队列中文件总数
*/
function fileDialogComplete(numSelected, numQueued, numTotalInQueued) {
$("#divFileCount").slideUp('fast');
var dataType = $('input[name="dataType"]:checked').val();
if(dataType == undefined)
{
$.messager.alert('提示', '请先选择要导入数据的类型', 'info');
swfu.cancelQueue();
return;
}
var param = {
param1:'param 1',
dataType:dataType
}
swfu.setPostParams(param);
fileTotal = numQueued;
this.startUpload();
}
/**
* 文件开始上传时触发
* @param file 开始上传目标文件
*/
function uploadStart(file) {
if (file) {
$("#logList li#" + file.id).find('p.status').text('上传中...');
$("#logList li#" + file.id).find('p.progressValue').text('0%');
}
}
/**
* 文件上传过程中定时触发,更新进度显示
* @param file 上传的文件
* @param bytesCompleted 已上传大小
* @param bytesTotal 文件总大小
*/
function uploadProgress(file, bytesCompleted, bytesTotal) {
var percentage = Math.round((bytesCompleted / bytesTotal) * 100);
$("#logList li#" + file.id).find('div.progress').css('width', (percentage - 1) + '%');
$("#logList li#" + file.id).find('span.progressValue').text((percentage - 1) + '%');
$("#logList li#" + file.id).find('p.status').text('处理中...');
}
/**
* 文件上传完毕并且服务器返回200状态码时触发
* @param file 上传的文件
* @param serverData
* @param response
*/
function uploadSuccess(file, response) {
var tmp = response.split(",");
var result = tmp[0].split("=");
var item = $("#logList li#" + file.id);
if (result[1] == 'success') {
item.find('div.progress').css('width', '100%');
item.find('span.progressValue').css('color', 'blue').text('100%');
item.addClass('success').find('p.status').html('上传完成!');
closeTabCell(file);
} else {
var message = tmp[1].split("=");
item.find('div.progress').css('width', '0%');
item.find('span.progressValue').css('color', 'red').text('0%');
item.addClass('error').find('p.status').css('color', 'red').html('上传失败:' + message[1]);
}
$('#importDetailTable').datagrid('load');
}
/*
*关闭上传成功的cell
* */
function closeTabCell(file) {
var swfUpload = swfu;
var stats = swfUpload.getStats();
swfUpload.setStats({successful_uploads: (stats.successful_uploads - 1)});
$("#" + file.id).remove();
$("li#" + file.id).slideUp(30000);
}
/**
* 上传过程中,出现错误时触发
* */
function uploadError(file, errorCode, message) {
try {
var item = $("#logList li#" + file.id);
item.find('div.progress').css('width', '0%');
item.find('span.progressValue').css('color', 'black').text('0%');
var status = item.addClass('error').find('p.status');
status.css('color', 'red');
switch (errorCode) {
case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
status.html("上传出现错误: " + message + ",请联系开发人员");
this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
status.html("上传失败.");
this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.IO_ERROR:
status.html("服务器出现错误");
this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
status.html("安全错误");
this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
status.html("上传超过上限.");
this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
status.html("校验失败. 上传将被跳过.");
this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
break;
case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
status.html("已取消");
swfu.cancelUpload(file.id)
break;
case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
status.html("已停止");
break;
default:
status.html("未知错误编码: " + errorCode);
this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
break;
}
} catch (ex) {
this.debug(ex);
}
}
/**
* 在一个上传周期结束后触发(uploadError及uploadSuccess均触发)
* 在此可以开始下一个文件上传(通过上传组件的uploadStart()方法)
* @param file 上传完成的文件对象
*/
function uploadComplete(file) {
this.uploadStart();
}
/**
* 计算已上传文件
* @param numFilesUploaded
*/
function uploadQueueComplete(numFilesUploaded) {
//$("#divFileCount").html(numFilesUploaded + "文件已上传");
var swfUpload = swfu;
var stats = swfUpload.getStats();
//每次上传成功一个文件,就在closeTabCell方法中将successful_uploads-1,所以此处的值是不成功的文件数
var failTotal = stats.successful_uploads;
if(fileTotal - failTotal == fileTotal ){
$('#dialog').dialog('close');
}else{
$("#divFileCount").slideDown('fast');
if(fileTotal - failTotal < 0){
$("#divFileCount").html("0个文件上传成功");
}else{
$("#divFileCount").html((fileTotal - failTotal)+"个文件上传成功");
}
}
}
/**这个位置是上传窗口,可以替换别的 在框架也中加入
<div id="dialog" class="easyui-dialog" style="width:540px;height:340px;padding:5px 5px"
data-options="closed:true,buttons:'#dialog-buttons',modal:true">
</div>
*/
$(function () {
var options = $('#dialog').dialog('options');
options.closed = false;
options.title = '上传文件';
options.height = 300;
options.width = 450;
options.buttons = [];
options.onClose = function () {
swfu.destroy();
}
$('#dialog').dialog(options);
});
</script>
css样式
#logList {
margin: 0;
padding: 0;
width: 400px
}
#logList li {
list-style-position: inside;
margin: 2px;
border: 1px solid #ccc;
padding: 10px;
color: #333;
font-size: 15px;
background: #FFF;
position: relative;
}
#logList li .progressBar {
border:1px solid #333;
height:5px;
background:#fff;
}
#logList li .progressValue {
color: red;
margin-left: 5px
}
#logList li .progress {
background:#999;
width:0%;
height:5px;
}
#logList li p {
margin:0;
line-height:18px;
}
#logList li.success {
border:1px solid #339933;
background:#ccf9b9;
}
#logList li span.cancel {
background:url('../_js/swfupload/delete.gif') no-repeat;
position:absolute;
top:5px;
right:5px;
width:16px;
height:16px;
cursor:pointer
}
样式表中 ('../_js/swfupload/delete.gif') 图片
SWFUpload 下载地址:百度网盘
链接: https://pan.baidu.com/s/1l77EjuMBKYuAFY3TAWgm_w
提取码: busj