struts2中實現檔案下載
1:jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
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 '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">
</head>
<body>
<s:form action="testUpload" method="post" enctype="multipart/form-data">
<s:file name="ppt" label="PPTFile"></s:file>
<s:textfield name="pptDesc" label="PPTDesc"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
2:struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 配置國際化資原始檔 -->
<constant name="struts.custom.i18n.resource" value="baseName"></constant>
<package name="hello" extends="struts-default" namespace="/">
<global-results>
<result name="input1">/day1/details.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="input1" exception="java.lang.ArithmeticException"></exception-mapping>
</global-exception-mappings>
<action name="login" class="com.study.RegAction">
<result name="success">/day1/success.jsp</result>
<result name="error">/day1/error.jsp</result>
<result name="input">/day1/login.jsp</result>
</action>
<action name="counter" class="com.study.CounterAction">
<result name="success">/day1/counter.jsp</result>
<result name="error">/day1/error.jsp</result>
<result name="input">/day1/login.jsp</result>
</action>
<action name="input" class="com.study.ProductAction" method="testTag">
<exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
<result name="success">/day1/testTag.jsp</result>
<result name="input">/day1/details.jsp</result>
</action>
<action name="TestActionContext" class="com.study.TestAction">
<result name="success">/day1/testContext.jsp</result>
</action>
<action name="TestAwareAction" class="com.study.TestAwareAction">
<result name="success">/day1/testAware.jsp</result>
</action>
<action name="ProductAction" class="com.study.ProductAction" method="testTag">
<result name="success">/day1/testTag.jsp</result>
</action>
<action name="TestServletContextAction" class="com.study.TestServletContextAction">
<result name="success">/day1/testServletContext.jsp</result>
</action>
<action name="TestServletAwareAction" class="com.study.TestServletAwareAction">
<result name="success">/day1/testServletAware.jsp</result>
</action>
<action name="TestActionSupport" class="com.study.TestActionSupport">
<result name="success">/day1/testActionSupport.jsp</result>
</action>
<action name="myform" class="com.study.UserAction" method="save">
<result name="input">/day1/form.jsp</result>
</action>
<action name="emp-*" class="com.app.EmployeeAction" method="{1}">
<result name="{1}">/day2/emp-{1}.jsp</result>
<result name="delete" type="redirect">/day2/emp-list.jsp</result>
</action>
<action name="testConversion" class="com.app.ConversionAction" method="execute">
<result name="success">/day2/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="testTaken" class="com.app.TakeAction" method="execute">
<result name="success" type="redirect">/day2/common-tag.jsp</result>
<result name="input">/day2/action.jsp</result>
</action>
<action name="testTag" class="com.app.Product" method="testTag">
<result name="success">/day2/common-tag.jsp</result>
</action>
<action name="testUpload" class="com.app.FileUploadAction" method="execute">
<result name="success">/day2/success.jsp</result>
</action>
</package>
</struts>
3:Action
package com.app;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 檔案上傳:
* Struts2的檔案上傳使用的是Commons FileUpload元件,所以需要匯入
* commons-fileupload-1.3.jar,commons-io-2.0.1.jar
* struts2進行檔案上傳需要使用FileUpload攔截器
* 檔案上傳:直接在Action定義三個屬性:
* @author Administrator
* private File ppt;//獲取上傳檔案
private String pptContentType;//獲取上傳檔案型別
private String pptFileName;//獲取上傳檔名稱
使用IO流進行檔案上傳
*/
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private File ppt;//獲取上傳檔案
private String pptContentType;//獲取上傳檔案型別
private String pptFileName;//獲取上傳檔名稱
private String pptDesc;
public String getPptDesc() {
return pptDesc;
}
public void setPptDesc(String pptDesc) {
this.pptDesc = pptDesc;
}
public File getPpt() {
return ppt;
}
public void setPpt(File ppt) {
this.ppt = ppt;
}
public String getPptContentType() {
return pptContentType;
}
public void setPptContentType(String pptContentType) {
this.pptContentType= pptContentType;
}
public String getPptFileName() {
return pptFileName;
}
public void setPptFilename(String pptFileName) {
this.pptFileName = pptFileName;
}
public String execute() throws IOException
{
System.out.println(ppt);
System.out.println(pptContentType);
System.out.println(pptFileName);
System.out.println(pptDesc);
ServletContext servletContext=ServletActionContext.getServletContext();
String direct=servletContext.getRealPath("/files/"+pptFileName);
System.out.println(direct);
FileOutputStream fos=new FileOutputStream(direct);
FileInputStream fis=new FileInputStream(ppt);
byte[] buffer=new byte[1024];
int len=0;
while((len=fis.read(buffer))!=-1)
{
fos.write(buffer,0,len);
}
fos.close();fis.close();
return "success";
}
}