这个是刚进入公司,技术总监叫我做的东西,开始的确没有什么头绪,以前做的项目里只做过上传,下载。而且也只是方法调用。这个方法涉及到对common.fileupload.jar里一个方法的重写,并且要实现进度条。经过两天的奋斗,再浏览了各位前辈们的佳作,终于实现了以下的代码
需要导入的jar包如下:
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'upload.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">
<style type="text/css">
iframe{
border:none;
width:0;
height:0;
}
#p_out{
width:200px;
height:12px;
margin:10px 0 0 0;
padding:1px;
font-size:10px;
border:solid #6b8e23 1px;
}
#p_first{
width:0%;
height:100%;
background-color:red;
margin:0;
padding:0;
}
#p_second{
width:0%;
height:100%;
background-color:blue;
margin:0;
padding:0;
}
#dis{
margin:0;
padding:0;
text-align:center;
font-size:12px;
height:12px;
width:200px;
}
</style>
</head>
<body>
<div class="main">
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
</style>
</script>
</html>
STRUTS配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
" http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 设置编码 -->
<constant name="struts.i18n.encoding" value="gbk" />
<!-- 设置struts2文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="209715200" />
<!-- 文件上传临时文件保存路径 -->
<constant name="struts.multipart.saveDir" value="c:\"></constant>
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.upload.MyRequestParseWrapper" scope="default" />
<!-- 改成自己定义的文件上传方式 -->
<constant name="struts.multipart.handler" value="myRequestParser" />
<package name="struts" extends="struts-default" namespace="/">
<action name="progress" class="com.upload.FileAction" method="progress">
<result>/file_box_upload.jsp</result>
</action>
<action name="uploadfile" class="com.upload.FileAction" method="uploadfile">
<result>/file_box_upload.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
" http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
</struts>
upload.java类:该类是采用servlet方法来存放文件
package com.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
public class UploadFile {
private static final Logger LOG = Logger.getLogger(UploadFile.class);// LOG日志
}
MyRequestParseWrapper.java重写源文件方法,不要其一次上传
package com.upload;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
public class MyRequestParseWrapper extends JakartaMultiPartRequest {
}
FileService.java类:这个类是一些方法提取出来写了,在action里直接调用
package com.upload;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.activation.DataHandler;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.activation.DataHandler;
public class FileService {
}
FileAction.java 这个实现进度条的action,我认为是最重要的一个类
package com.upload;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.upload.UploadFile;
import com.upload.UploadFile.Progress;
import com.upload.UploadFile;
import com.upload.UploadFile.Progress;
public class FileAction extends ActionSupport {
}
download.action:这类是从临时文件中下载文件给我们实际上传的目录
package com.upload;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport
{
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport
{
}