1. 程式人生 > >struts2中實現檔案下載

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";
   }
   
}