Struts2文件下载

一个简单的利用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. <filter>
  11. <filter-name>struts2 </filter-name>
  12. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
  13. </filter>
  14. <filter-mapping>
  15. <filter-name>struts2 </filter-name>
  16. <url-pattern>/* </url-pattern>
  17. </filter-mapping>
  18. </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. import java.io.InputStream;
  3. import org.apache.struts2.ServletActionContext;
  4. public class DownloadAction {
  5. private String fileName;
  6. public void setFileName ( String fileName ) {
  7. this. fileName = fileName;
  8. }
  9. public InputStream getInputStream ( ) {
  10. return ServletActionContext. getServletContext ( ). getResourceAsStream ( "/" + fileName );
  11. }
  12. public String execute ( ) {
  13. return "success";
  14. }
  15. }

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

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

附:contentType类型.
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javas

<wbr>cript', <br> 'skp' =&gt; 'application/x-koan', <br> 'skd' =&gt; 'application/x-koan', <br> 'skt' =&gt; 'application/x-koan', <br> 'skm' =&gt; 'application/x-koan', <br> 'latex' =&gt; 'application/x-latex', <br> 'nc' =&gt; 'application/x-netcdf', <br> 'cdf' =&gt; 'application/x-netcdf', <br> 'sh' =&gt; 'application/x-sh', <br> 'shar' =&gt; 'application/x-shar', <br> 'swf' =&gt; 'application/x-shockwave-flash', <br> 'sit' =&gt; 'application/x-stuffit', <br> 'sv4cpio' =&gt; 'application/x-sv4cpio', <br> 'sv4crc' =&gt; 'application/x-sv4crc', <br> 'tar' =&gt; 'application/x-tar', <br> 'tcl' =&gt; 'application/x-tcl', <br> 'tex' =&gt; 'application/x-tex', <br> 'texinfo' =&gt; 'application/x-texinfo', <br> 'texi' =&gt; 'application/x-texinfo', <br> 't' =&gt; 'application/x-troff', <br> 'tr' =&gt; 'application/x-troff', <br> 'roff' =&gt; 'application/x-troff', <br> 'man' =&gt; 'application/x-troff-man', <br> 'me' =&gt; 'application/x-troff-me', <br> 'ms' =&gt; 'application/x-troff-ms', <br> 'ustar' =&gt; 'application/x-ustar', <br> 'src' =&gt; 'application/x-wais-source', <br> 'xhtml' =&gt; 'application/xhtml+xml', <br> 'xht' =&gt; 'application/xhtml+xml', <br> 'zip' =&gt; 'application/zip', <br> 'au' =&gt; 'audio/basic', <br> 'snd' =&gt; 'audio/basic', <br> 'mid' =&gt; 'audio/midi', <br> 'midi' =&gt; 'audio/midi', <br> 'kar' =&gt; 'audio/midi', <br> 'mpga' =&gt; 'audio/mpeg', <br> 'mp2' =&gt; 'audio/mpeg', <br> 'mp3' =&gt; 'audio/mpeg', <br> 'aif' =&gt; 'audio/x-aiff', <br> 'aiff' =&gt; 'audio/x-aiff', <br> 'aifc' =&gt; 'audio/x-aiff', <br> 'm3u' =&gt; 'audio/x-mpegurl', <br> 'ram' =&gt; 'audio/x-pn-realaudio', <br> 'rm' =&gt; 'audio/x-pn-realaudio', <br> 'rpm' =&gt; 'audio/x-pn-realaudio-plugin', <br> 'ra' =&gt; 'audio/x-realaudio', <br> 'wav' =&gt; 'audio/x-wav', <br> 'pdb' =&gt; 'chemical/x-pdb', <br> 'xyz' =&gt; 'chemical/x-xyz', <br> 'bmp' =&gt; 'image/bmp', <br> 'gif' =&gt; 'image/gif', <br> 'ief' =&gt; 'image/ief', <br> 'jpeg' =&gt; 'image/jpeg', <br> 'jpg' =&gt; 'image/jpeg', <br> 'jpe' =&gt; 'image/jpeg', <br> 'png' =&gt; 'image/png', <br> 'tiff' =&gt; 'image/tiff', <br> 'tif' =&gt; 'image/tiff', <br> 'djvu' =&gt; 'image/vnd.djvu', <br> 'djv' =&gt; 'image/vnd.djvu', <br> 'wbmp' =&gt; 'image/vnd.wap.wbmp', <br> 'ras' =&gt; 'image/x-cmu-raster', <br> 'pnm' =&gt; 'image/x-portable-anymap', <br> 'pbm' =&gt; 'image/x-portable-bitmap', <br> 'pgm' =&gt; 'image/x-portable-graymap', <br> 'ppm' =&gt; 'image/x-portable-pixmap', <br> 'rgb' =&gt; 'image/x-rgb', <br> 'xbm' =&gt; 'image/x-xbitmap', <br> 'xpm' =&gt; 'image/x-xpixmap', <br> 'xwd' =&gt; 'image/x-xwindowdump', <br> 'igs' =&gt; 'model/iges', <br> 'iges' =&gt; 'model/iges', <br> 'msh' =&gt; 'model/mesh', <br> 'mesh' =&gt; 'model/mesh', <br> 'silo' =&gt; 'model/mesh', <br> 'wrl' =&gt; 'model/vrml', <br> 'vrml' =&gt; 'model/vrml', <br> 'css' =&gt; 'text/css', <br> 'html' =&gt; 'text/html', <br> 'htm' =&gt; 'text/html', <br> 'asc' =&gt; 'text/plain', <br> 'txt' =&gt; 'text/plain', <br> 'rtx' =&gt; 'text/richtext', <br> 'rtf' =&gt; 'text/rtf', <br> 'sgml' =&gt; 'text/sgml', <br> 'sgm' =&gt; 'text/sgml', <br> 'tsv' =&gt; 'text/tab-separated-values', <br> 'wml' =&gt; 'text/vnd.wap.wml', <br> 'wmls' =&gt; 'text/vnd.wap.wmlscript', <br> 'etx' =&gt; 'text/x-setext', <br> 'xsl' =&gt; 'text/xml', <br> 'xml' =&gt; 'text/xml', <br> 'mpeg' =&gt; 'video/mpeg', <br> 'mpg' =&gt; 'video/mpeg', <br> 'mpe' =&gt; 'video/mpeg', <br> 'qt' =&gt; 'video/quicktime', <br> 'mov' =&gt; 'video/quicktime', <br> 'mxu' =&gt; 'video/vnd.mpegurl', <br> 'avi' =&gt; 'video/x-msvideo', <br> 'movie' =&gt; 'video/x-sgi-movie', <br> 'ice' =&gt; 'x-conference/x-cooltalk'</wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值