Liny_@NotePad

沉迷ACG中

Struts2文件下载

YOYO posted @ 2009年4月24日 23:27 in 【Java EE】 with tags struts2 下载 , 5761 阅读

一个简单的利用struts2做文件下载的demo……

首先配好struts:

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3.         xmlns="http://java.sun.com/xml/ns/j2ee"
  4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6.         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7.   <welcome-file-list>
  8.     <welcome-file>index.jsp</welcome-file>
  9.   </welcome-file-list>
  10.  
  11.   <filter>
  12.         <filter-name>struts2</filter-name>
  13.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  14.   </filter>
  15.   <filter-mapping>
  16.         <filter-name>struts2</filter-name>
  17.         <url-pattern>/*</url-pattern>
  18.   </filter-mapping>
  19.  
  20. </web-app>

struts.xml——这里是重点

  1. <!DOCTYPE struts PUBLIC
  2.          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  3.          "http://struts.apache.org/dtds/struts-2.0.dtd">
  4.  <struts>
  5.      <package name="default" extends="struts-default">
  6.         <action name="download" class="action.DownloadAction">
  7.            <result type="stream">
  8.                                 <param name="contentType">application/octet-stream</param>
  9.                                 <param name="inputName">inputStream</param>
  10.                                 <param name="contentDisposition">attachment;filename="${fileName}"</param>
  11.                                 <param name="bufferSize">4096</param>
  12.            </result>
  13.         </action>
  14.      </package>
  15.  </struts>

当result为stream类型时,struts2会自动根据你配置好的参数下载文件。

其中主要使用的参数是:
contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制
inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。
contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。
bufferSize 下载文件的缓冲大小

之后写个DownloadAction:

  1. package action;
  2.  
  3. import java.io.InputStream;
  4.  
  5. import org.apache.struts2.ServletActionContext;
  6.  
  7. public class DownloadAction {
  8.        
  9.         private String fileName;
  10.        
  11.         public void setFileName(String fileName) {
  12.                 this.fileName = fileName;
  13.         }
  14.         public InputStream getInputStream() {
  15.                 return ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);
  16.         }
  17.        
  18.         public String execute(){
  19.                 return "success";
  20.         }
  21.  
  22. }

* 注意使用getResourceAsStream方法时,文件路径必须是以“/”开头,且是相对路径。这个路径是相对于项目根目录的。
* 可以用return new FileInputStream(fileName)的方法来得到绝对路径的文件。

在项目目录(WebRoot)随意丢一个test.txt,部署好后进入浏览器,输入tomcat地址/项目路径/download.action?fileName=test.txt即可下载到该文件。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter