您的位置:首页 > 编程语言 > Java开发

java一款支持批量上传的代码示例

2013-03-20 10:46 281 查看
效果图如下:








该工程包含五个源文件:BackGroundService.java、BeanControler.java、EventListenerImpl.java、FileUploadListener.java和FileUploadStatus.java;以及2个jsp页面。源码已提供免费下载,下载后直接部署到tomcat中运行即可。

BackGroundService.java:

package liuzuochen.sample.upload;

/**
* <p>Title: 后台服务</p>
*
* <p>Description: 为客户端提供上传及文件传输状态查询服务</p>
*
*/

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.*;

public class BackGroundService extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {

public static final String UPLOAD_DIR = "/upload";
public static final String DEFAULT_UPLOAD_FAILURE_URL = "index2.jsp";

public BackGroundService() {
super();
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
doPost(request, response);
}

/**
* 从文件路径中取出文件名
*/
private String takeOutFileName(String filePath) {
int pos = filePath.lastIndexOf(File.separator);
if (pos > 0) {
return filePath.substring(pos + 1);
} else {
return filePath;
}
}

/**
* 从request中取出FileUploadStatus Bean
*/
public static FileUploadStatus getStatusBean(
HttpServletRequest request) {
BeanControler beanCtrl = BeanControler.getInstance();
return beanCtrl.getUploadStatus(request.getRemoteAddr());
}

/**
* 把FileUploadStatus Bean保存到类控制器BeanControler
*/
public static void saveStatusBean(
HttpServletRequest request,
FileUploadStatus statusBean) {
statusBean.setUploadAddr(request.getRemoteAddr());
BeanControler beanCtrl = BeanControler.getInstance();
beanCtrl.setUploadStatus(statusBean);
}

/**
* 删除已经上传的文件
*/
private void deleteUploadedFile(HttpServletRequest request) {
FileUploadStatus satusBean = getStatusBean(request);
for (int i = 0; i < satusBean.getUploadFileUrlList().size(); i++) {
File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) +
File.separator +
satusBean.getUploadFileUrlList().
get(i));
uploadedFile.delete();
}
satusBean.getUploadFileUrlList().clear();
satusBean.setStatus("删除已上传的文件");
saveStatusBean(request, satusBean);
}

/**
* 上传过程中出错处理
*/
private void uploadExceptionHandle(
HttpServletRequest request,
String errMsg) throws ServletException, IOException {
//首先删除已经上传的文件
deleteUploadedFile(request);
FileUploadStatus satusBean = getStatusBean(request);
satusBean.setStatus(errMsg);
saveStatusBean(request, satusBean);
}

/**
* 初始化文件上传状态Bean
*/
private FileUploadStatus initStatusBean(HttpServletRequest
request) {
FileUploadStatus satusBean = new FileUploadStatus();
satusBean.setStatus("正在准备处理");
satusBean.setUploadTotalSize(request.getContentLength());
satusBean.setProcessStartTime(System.currentTimeMillis());
satusBean.setBaseDir(request.getContextPath() + UPLOAD_DIR);
return satusBean;
}

/**
* 处理文件上传
*/
private void processFileUpload(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(10240000);
//设置临时文件存储位置
factory.setRepository(new File(request.getRealPath("/upload/temp")));

ServletFileUpload upload = new ServletFileUpload(factory);
//设置单个文件的最大上传值
upload.setFileSizeMax(5*102400000);
//设置整个request的最大值
upload.setSizeMax(10*102400000);
upload.setProgressListener(new FileUploadListener(request));
//保存初始化后的FileUploadStatus Bean
saveStatusBean(request, initStatusBean(request));
FileUploadStatus satusBean =
getStatusBean(request);
String forwardURL = "";
int flag=1;
try {
List items = upload.parseRequest(request);
//获得返回url
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);
if (item.isFormField()) {
forwardURL = item.getString();
break;
}
}

//处理文件上传
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);

//取消上传
if (getStatusBean(request).getCancel()) {
deleteUploadedFile(request);
break;
}
//保存文件
else if (!item.isFormField() && item.getName().length() > 0) {
String fileName = takeOutFileName(item.getName());
File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) +
File.separator + fileName);
item.write(uploadedFile);
flag++;
//更新上传文件列表

satusBean.getUploadFileUrlList().add(fileName);
saveStatusBean(request, satusBean);
//Thread.sleep(500);
}
}

} catch (FileUploadException e) {
uploadExceptionHandle(request, "上传文件时发生错误:" + e.getMessage());
} catch (Exception e) {
uploadExceptionHandle(request, "保存上传文件时发生错误:" + e.getMessage());
}
if (forwardURL.length() == 0) {
forwardURL = DEFAULT_UPLOAD_FAILURE_URL;
}
request.setAttribute("msg", "<font size=2><b>文件上传成功!</b></font>");
request.getRequestDispatcher("index2.jsp").forward(request, response);
}

/**
* 回应上传状态查询
*/
private void responseStatusQuery(HttpServletRequest request,
HttpServletResponse response) throws
IOException {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
FileUploadStatus satusBean = getStatusBean(request);
response.setCharacterEncoding("gbk");
response.getWriter().write(satusBean.toJSon());
}

/**
* 处理取消文件上传
*/
private void processCancelFileUpload(HttpServletRequest request,
HttpServletResponse response) throws
IOException {
FileUploadStatus satusBean = getStatusBean(request);
satusBean.setCancel(true);
saveStatusBean(request, satusBean);
responseStatusQuery(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
processFileUpload(request, response);
} else {
request.setCharacterEncoding("gbk");

if (request.getParameter("uploadStatus") != null) {
responseStatusQuery(request, response);
}
if (request.getParameter("cancelUpload") != null) {
processCancelFileUpload(request, response);
}

}
}
}


BeanControler.java:

package liuzuochen.sample.upload;

/**
* <p>Title: 类控制器</p>
*
* <p>Description: 主要作用是对FileUploadStatus进行管理,为客户端提供相应的
* FileUploadStatus类对象。这是一个单例类。</p>
*
*/
import java.util.Vector;

public class BeanControler {
private static BeanControler beanControler = new BeanControler();
private Vector vector = new Vector();
private BeanControler() {
}

public static BeanControler getInstance() {
return beanControler;
}

/**
* 取得相应FileUploadStatus类对象的存储位置
*/
private int indexOf(String strID) {
int nReturn = -1;
for (int i = 0; i < vector.size(); i++) {
FileUploadStatus status = (FileUploadStatus) vector.elementAt(i);
if (status.getUploadAddr().equals(strID)) {
nReturn = i;
break;
}
}
return nReturn;
}
/**
* 取得相应FileUploadStatus类对象
*/
public FileUploadStatus getUploadStatus(String strID) {
return (FileUploadStatus) vector.elementAt(indexOf(strID));
}
/**
* 存储FileUploadStatus类对象
*/
public void setUploadStatus(FileUploadStatus status) {
int nIndex = indexOf(status.getUploadAddr());
if ( -1 == nIndex) {
vector.add(status);
} else {
vector.insertElementAt(status, nIndex);
vector.removeElementAt(nIndex + 1);
}
}
/**
* 删除FileUploadStatus类对象
*/
public void removeUploadStatus(String strID){
int nIndex = indexOf(strID);
if(-1!=nIndex)
vector.removeElementAt(nIndex);
}
}


EventListenerImpl.java:

package liuzuochen.sample.upload;

import javax.servlet.http.HttpServletRequest;

import com.enterprisedt.net.ftp.EventListener;
import com.enterprisedt.util.debug.Logger;

public class EventListenerImpl implements EventListener {

public static long transferedbyte=0;
public static long totalfilesize=0;
public static long flag=0;
private Logger log = Logger.getLogger(EventListenerImpl.class);
private static int cuNum=0;
private HttpServletRequest request=null;
public static long totalReadBytes=0;

public static long totalReadByteses=0;
public static int numflag=1;
public EventListenerImpl(int cuNum,long filesize,HttpServletRequest request)
{
EventListenerImpl.totalfilesize=0;
EventListenerImpl.transferedbyte=0;
EventListenerImpl.flag=0;
this.cuNum=cuNum;
this.request=request;

EventListenerImpl.totalReadBytes=0;

this.totalReadBytes=filesize;
totalReadByteses+=totalReadBytes;

}
public static void setTotalSize(long temp)
{
EventListenerImpl.totalfilesize=temp;
}
public void bytesTransferred(String connId, String remoteFilename, long bytes) {

EventListenerImpl.transferedbyte=bytes;
FileUploadStatus statusBean= BackGroundService.getStatusBean(request);
statusBean.setUploadTotalSize(FileUploadListener.totalFileSize);

//读取完成
if (FileUploadListener.totalFileSize ==this.transferedbyte) {
statusBean.setStatus("完成对" + FileUploadListener.currentFileNum +"个文件的FTP处理 " + FileUploadListener.totalFileSize + " bytes.");
statusBean.setReadTotalSize(this.transferedbyte);
statusBean.setSuccessUploadFileCount(FileUploadListener.currentFileNum);
statusBean.setProcessEndTime(System.currentTimeMillis());
statusBean.setProcessRunningTime(statusBean.getProcessEndTime());
statusBean.setUploadFlag("ftp");
//读取中
} else {
statusBean.setStatus("当前正在进行第" +cuNum +"个文件的FTP文件上传:已经处理了 " + (bytes+totalReadByteses-totalReadBytes) + " / " + FileUploadListener.totalFileSize+ " bytes.");
statusBean.setReadTotalSize(bytes+totalReadByteses-totalReadBytes);
statusBean.setCurrentUploadFileNum(cuNum);
statusBean.setProcessRunningTime(System.currentTimeMillis());
statusBean.setUploadFlag("ftp");
}
BackGroundService.saveStatusBean(request,statusBean);

}

/**
* Log an FTP command being sent to the server. Not used for SFTP.
*
* @param cmd   command string
*/
public void commandSent(String connId, String cmd) {

}

/**
* Log an FTP reply being sent back to the client. Not used for
* SFTP.
*
* @param reply   reply string
*/
public void replyReceived(String connId, String reply) {

}

/**
* Notifies that a download has started
*
* @param remoteFilename   remote file name
*/
public void downloadStarted(String connId, String remoteFilename) {

}

/**
* Notifies that a download has completed
*
* @param remoteFilename   remote file name
*/
public void downloadCompleted(String connId, String remoteFilename) {

}

/**
* Notifies that an upload has started
*
* @param remoteFilename   remote file name
*/
public void uploadStarted(String connId, String remoteFilename) {

EventListenerImpl.transferedbyte=0;

}

/**
* Notifies that an upload has completed
*
* @param remoteFilename   remote file name
*/
public void uploadCompleted(String connId, String remoteFilename) {

EventListenerImpl.transferedbyte=0;
EventListenerImpl.totalfilesize=0;
EventListenerImpl.flag=-1;
}
public static long returnFlag()
{
return EventListenerImpl.flag;
}
public static long getTransferedbyte() {
return transferedbyte;
}

public static long getTotalfilesize() {
return totalfilesize;
}
}


FileUploadListener.java:

package liuzuochen.sample.upload;

import org.apache.commons.fileupload.ProgressListener;
import javax.servlet.http.HttpServletRequest;

public class FileUploadListener implements ProgressListener{
private HttpServletRequest request=null;
public FileUploadListener(HttpServletRequest request){
this.request=request;
}
public static int currentFileNum=0;
public static long totalFileSize=0;
/**
* 更新状态
*/
public void update(long pBytesRead, long pContentLength, int pItems){
FileUploadStatus statusBean= BackGroundService.getStatusBean(request);
statusBean.setUploadTotalSize(pContentLength);
EventListenerImpl.setTotalSize(pContentLength);
//读取完成
if (pContentLength == -1) {
statusBean.setStatus("完成对" + pItems +"个文件的读取:读取了 " + pBytesRead + " bytes.");
statusBean.setReadTotalSize(pBytesRead);
statusBean.setSuccessUploadFileCount(pItems);
statusBean.setProcessEndTime(System.currentTimeMillis());
statusBean.setProcessRunningTime(statusBean.getProcessEndTime());
statusBean.setUploadFlag("http");
//读取中
} else {
statusBean.setStatus("当前正在处理第" +(pItems+1)/3 +"个文件的客户端上传:已经读取了 " + pBytesRead + " / " + pContentLength+ " bytes.");
statusBean.setReadTotalSize(pBytesRead);
statusBean.setCurrentUploadFileNum((pItems+1)/3);
statusBean.setProcessRunningTime(System.currentTimeMillis());
statusBean.setUploadFlag("http");
}
BackGroundService.saveStatusBean(request,statusBean);
}
}


FileUploadStatus.java:

package liuzuochen.sample.upload;

import java.util.*;

public class FileUploadStatus {
//上传用户地址
private String uploadAddr;
//上传总量
private long uploadTotalSize = 0;
//读取上传总量
private long readTotalSize = 0;
//当前上传文件号
private int currentUploadFileNum = 0;
//成功读取上传文件数
private int successUploadFileCount = 0;
//状态
private String status = "";
//处理起始时间
private long processStartTime = 0l;
//处理终止时间
private long processEndTime = 0l;
//处理执行时间
private long processRunningTime = 0l;
//上传文件URL列表
private List uploadFileUrlList = new ArrayList();
//取消上传
private boolean cancel = false;
//上传base目录
private String baseDir = "";

private String uploadFlag="";
public FileUploadStatus() {

}

public String getBaseDir() {
return baseDir;
}

public void setBaseDir(String baseDir) {
this.baseDir = baseDir;
}

public boolean getCancel() {
return cancel;
}

public void setCancel(boolean cancel) {
this.cancel = cancel;
}

public List getUploadFileUrlList() {
return uploadFileUrlList;
}

public void setUploadFileUrlList(List uploadFileUrlList) {
this.uploadFileUrlList = uploadFileUrlList;
}

public long getProcessRunningTime() {
return processRunningTime;
}

public void setProcessRunningTime(long processRunningTime) {
this.processRunningTime = processRunningTime;
}

public long getProcessEndTime() {
return processEndTime;
}

public void setProcessEndTime(long processEndTime) {
this.processEndTime = processEndTime;
}

public long getProcessStartTime() {
return processStartTime;
}

public void setProcessStartTime(long processStartTime) {
this.processStartTime = processStartTime;
}

public long getReadTotalSize() {
return readTotalSize;
}

public void setReadTotalSize(long readTotalSize) {
this.readTotalSize = readTotalSize;
}

public int getSuccessUploadFileCount() {
return successUploadFileCount;
}

public void setSuccessUploadFileCount(int successUploadFileCount) {
this.successUploadFileCount = successUploadFileCount;
}

public int getCurrentUploadFileNum() {
return currentUploadFileNum;
}

public void setCurrentUploadFileNum(int currentUploadFileNum) {
this.currentUploadFileNum = currentUploadFileNum;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public long getUploadTotalSize() {
return uploadTotalSize;
}

public String getUploadAddr() {
return uploadAddr;
}

public void setUploadTotalSize(long uploadTotalSize) {
this.uploadTotalSize = uploadTotalSize;
}

public void setUploadAddr(String uploadAddr) {
this.uploadAddr = uploadAddr;
}

public String toJSon() {
StringBuffer strJSon = new StringBuffer();
strJSon.append("{UploadTotalSize:").append(getUploadTotalSize()).append(
",")
.append("ReadTotalSize:").append(getReadTotalSize()).append(",")
.append("CurrentUploadFileNum:").append(getCurrentUploadFileNum()).
append(",")
.append("SuccessUploadFileCount:").append(
getSuccessUploadFileCount()).append(",")
.append("Status:'").append(getStatus()).append("',")
.append("ProcessStartTime:").append(getProcessStartTime()).
append(",")
append("',")
.append("Cancel:").append(getCancel()).append("}");

return strJSon.toString();

}

public String getUploadFlag() {
return uploadFlag;
}

public void setUploadFlag(String uploadFlag) {
this.uploadFlag = uploadFlag;
}

}


主页面index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style>
body { background: #ffffff; color: #444; }
a { color: #07c; text-decoration: none; border: 0; background-color: transparent; }
body, div, q, iframe, form, h5 { margin: 0; padding: 0; }
img, fieldset { border: none 0; }
body, td, textarea { word-break: break-all; word-wrap: break-word; line-height:1.6; }
body, input, textarea, select, button { margin: 0; font-size: 14px; font-family: Tahoma, SimSun, sans-serif; }
div, p, table, th, td { font-size:1em; font-family:inherit; line-height:inherit; }
h5 { font-size:12px; }
ol li,ul li{ margin-bottom:0.5em;}
pre, code { font-family: "Courier New", Courier, monospace; word-wrap:break-word; line-height:1.4; font-size:12px;}
pre{background:#f6f6f6; border:#eee solid 1px; margin:1em 0.5em; padding:0.5em 1em;}
#content { padding-left:50px; padding-right:50px; }
#content h2 { font-size:20px; color:#069; padding-top:8px; margin-bottom:8px; }
#content h3 { margin:8px 0; font-size:14px; COLOR:#693; }
#content h4 { margin:8px 0; font-size:16px; COLOR:#690; }
#content div.item { margin-top:10px; margin-bottom:10px; border:#eee solid 4px; padding:10px; }
hr { clear:both; margin:7px 0; +margin: 0;
border:0 none; font-size: 1px; line-height:1px; color: #069; background-color:#069; height: 1px; }
.infobar { background:#fff9e3; border:1px solid #fadc80; color:#743e04; }
</style>
<script type="text/javascript" src="zDrag.js"></script>
<script type="text/javascript" src="zDialog.js"></script>
<script type="text/javascript">
var diag;
var initHeight=180;
function openWindow()
{
diag   = new Dialog();
diag.Width = 680;
diag.Height = initHeight;
diag.Title = "文件上传窗口";
diag.URL = "index2.jsp";
diag.show();
}
function addHeight()
{
diag.setSize(680,initHeight+30);
initHeight=initHeight+30;
}
function decreaseHeight()
{
diag.setSize(680,initHeight-30);
initHeight=initHeight-30;
}
function closeWindow()
{
diag.close();
}
function resizeHeight()
{
initHeight=180;
diag.setSize(680,180);
}
function addProgressHeight()
{
diag.setSize(680,initHeight+80);
}
</script>
</head>

<body>
<input type="button" value="上传文件" onclick="openWindow();"/>
</body>
</html>


上传处理页面index2.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="zDrag.js"></script>
<script type="text/javascript" src="zDialog.js"></script>
 <script type="text/javascript" src="./javascript/prototype.js"  charset="utf-8"></script>
   <script type="text/javascript" src="./javascript/AjaxWrapper.js" charset="utf-8"></script>
   <link href="./css/fileUpload.css" type="text/css" rel="stylesheet"/>
    <style type="text/css">
      div#readme{
         width:100%;padding:3px 0;background: #BAFB80;
background-image: url("images/info_32.png");
background-repeat: no-repeat;
text-align: center;
font:85%/1.45 "Lucida Sans Unicode","Lucida Grande",Arial,sans-serif;
font-size:medium;
font-weight: bold;
line-height: 25px;
height: 25px;
color:gray;
     
}

    </style>
<style>

</style>
<script type="text/javascript">
var flag=1;
function getFileSize(fileSize)
{
var num = new Number();
var unit = '';

if (fileSize > 1*1024*1024*1024){
num = fileSize/1024/1024/1024;
unit = "G"
}
else if (fileSize > 1*1024*1024){
num = fileSize/1024/1024;
unit = "M"
}
else if (fileSize > 1*1024){
num = fileSize/1024;
unit = "K"
}
else{
return fileSize;
}

return num.toFixed(2) + unit;

}
function addRow()
{

if(flag>4)
{
Dialog.alert('<font size=2><b>一次最多上传5个文件!</b></font>');

return;
}

var form=document.getElementById('tool');

var text1 = document.createElement("input");
text1.size = "60";
text1.type = "text";
text1.name = "txt"+flag+1;
text1.id = "txt"+flag+1;
text1.className='input_text';

var btn1=  document.createElement("input");
btn1.name='uploadfile'+flag+1;
btn1.id='uploadfile'+flag+1;
btn1.size=40;
btn1.value='浏览...';
btn1.className="uploadfile2";
btn1.hidefocus='';

var inputNode1 = document.createElement("input");
inputNode1.size = "30";
inputNode1.type = "file";
inputNode1.name = "file"+flag+1;
inputNode1.id = "file"+flag+1;
inputNode1.className='input_file';

if(inputNode1.addEventListener)
{
inputNode1.addEventListener("change",changeValue(text1,inputNode1),false);
}
else if(inputNode1.attachEvent)
{

inputNode1.attachEvent("onchange", changeValue(text1,inputNode1)) ;
}

var inputNode3 = document.createElement("a");
inputNode3.href = "javascript:void(0);";

var img=document.createElement("img");
img.src='images/delete.png';
img.width=28;
img.height=28;
img.border='0';
img.className='imgstyle';
img.alt='删除一行';
inputNode3.appendChild(img);

if(inputNode3.addEventListener)
{
inputNode3.addEventListener("click",deleterow(form,text1,btn1,inputNode1,inputNode3),false);
}
else if(inputNode3.attachEvent)
{

inputNode3.attachEvent("onclick", deleterow(form,text1,btn1,inputNode1,inputNode3)) ;
}

form.appendChild(text1);
form.appendChild(btn1);
form.appendChild(inputNode1);
form.appendChild(inputNode3);
flag++;

parent.addHeight();

}

var changeValue=function changeValue(v1,v2)
{
return function()
{
v1.value=v2.value;
}
}
function init()
{
var btn1=document.getElementById('uploadfile2');
btn1.size=40;
btn1.value='浏览...';
btn1.className="uploadfile2";

}
var deleterow = function(form,text1,btn1,inputNode1,inputNode3){
return function(){
form.removeChild(text1);
form.removeChild(btn1);
form.removeChild(inputNode1);
form.removeChild(inputNode3);
flag--;
parent.decreaseHeight();
}
}
function closeWindow()
{
parent.closeWindow();
}
</script>
</head>
<body onload="init();">
<div id="controlPanel">
<div id="readme">说明:  最大上传量:1000M,单个文件最大容量:100M</div>
<div id="uploadFileUrl"></div>
<form id="fileUploadForm" name="fileUploadForm" action="./BackGroundService.action"
enctype="multipart/form-data" method="post">
<input class="input_text" type="text" id="txt1" name="txt1" size="60"/><input type="button" name="uploadfile2"  id="uploadfile2" style="padding-left: 26px;"/><input class="input_file" size="30" type="file" name="file1" id="file1" hidefocus onchange="txt1.value=this.value"/><a href="javascript:void(0);"  onclick="addRow();"><img src="images/add.png" width="28" height="28" border="0" alt="添加一行" class="imgstyle"/></a><br>
<div id="tool">
</div>
<br>
<input type="submit" name="uploadButton" id="uploadButton" value="开始上传" class="up_btn"/>
<input type="button" name="cancelUploadButton" onclick="closeWindow();" id="cancelUploadButton" value="取消上传" class="up_btn"/><br>
</form>

<div id="progressBar">
<div id="theMeter">
<div id="progressBarText"></div>
<div id="totalProgressBarBox">
<div id="totalProgressBarBoxContent"></div>
</div>
</div>
<div id="progressStatusText"></div>
</div>

</div>
<script>
Element.hide('progressBar');
Event.observe('fileUploadForm','submit',startProgress,false);
Event.observe('cancelUploadButton','click',cancelProgress,false);

//刷新上传状态
function refreshUploadStatus(){
var ajaxW = new AjaxWrapper(false);
ajaxW.putRequest(
'./BackGroundService.action',
'uploadStatus=',
function(responseText){
eval("uploadInfo = " + responseText);
var progressPercent = Math.ceil(
(uploadInfo.ReadTotalSize) / uploadInfo.UploadTotalSize * 100);

if(uploadInfo.UploadFlag=='http'){
flag='(HTTP状态)';

}else
{
flag='(FTP状态)';
}

$('progressBarText').innerHTML=flag;
$('progressBarText').innerHTML += ' 上传处理进度: '+progressPercent+'% 【'+
getFileSize(uploadInfo.ReadTotalSize)+'/'+getFileSize(uploadInfo.UploadTotalSize) +
'】 正在处理第'+uploadInfo.CurrentUploadFileNum+'个文件'+
' 耗时: '+(uploadInfo.ProcessRunningTime-uploadInfo.ProcessStartTime)+' ms';

$('progressStatusText').innerHTML=' 反馈状态: '+uploadInfo.Status;
$('totalProgressBarBoxContent').style.width = parseInt(progressPercent * 3.5) + 'px';
}
);
}
//上传处理
function startProgress(){
parent.addProgressHeight();
Element.show('progressBar');
$('progressBarText').innerHTML = ' 上传处理进度: 0%';
$('progressStatusText').innerHTML=' 反馈状态:';
$('uploadButton').disabled = true;
$('cancelUploadButton').disabled = true;
var periodicalExe=new PeriodicalExecuter(refreshUploadStatus,0.5);
return true;
}
//取消上传处理
function cancelProgress(){
$('cancelUploadButton').disabled = true;
var ajaxW = new AjaxWrapper(false);
ajaxW.putRequest(
'./BackGroundService.action',
'cancelUpload=true',
//因为form的提交,这可能不会执行
function(responseText){
eval("uploadInfo = " + responseText);
$('progressStatusText').innerHTML=' 反馈状态: '+uploadInfo.status;
if (msgInfo.cancel=='true'){
alert('删除成功!');
window.location.reload();
};
}
);
}
</script>
<%
String msg=(String)request.getAttribute("msg");
if(msg!=null&&msg.length()>0)
{
%>
<script type="text/javascript">
Dialog.alert('<%=msg%>');
parent.resizeHeight();

</script>

<%
}
%>
</body>
</html>
源码下载地址:http://download.csdn.net/detail/xuweilinjijis/5160835
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: