struts2文件下载

来源:互联网 发布:海尔电脑网络驱动 编辑:程序博客网 时间:2024/05/16 12:07
struts2文件下载

首先、是struts2环境的搭建即web.xml文件的编写:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><display-name>Archetype Created Web Application</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
/filedownload/第二、是action的实现:
package action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;public class FileDownloadAction {private String fileName;private int flag;public void setFileName(String fileName) {this.fileName = fileName;}public String getFileName() {return fileName;}public void setFlag(int flag) {this.flag = flag;}public int getFlag() {return flag;}public InputStream getDownloadFile() {if (flag == 1) {this.fileName = "hibernate对象状态转换.png";return ServletActionContext.getServletContext().getResourceAsStream("/filedownload/" + this.fileName);} else if (flag == 2) {this.fileName = "jquery1.8.3_20121129.chm";return ServletActionContext.getServletContext().getResourceAsStream("/filedownload/" + this.fileName);}return null;}public String download() {return "success";}}
注意:使用getResourceAsStream方法时,文件路径必须是以“/”开头,且是相对路径。这个路径是相对于项目根目录的。
          可以用return new FileInputStream(fileName)的方法来得到绝对路径的文件。


第三、是action的配置集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><package name="download" namespace="/download" extends="struts-default"><action name="*" class="action.FileDownloadAction" method="{1}"><result name="success" type="stream"><param name="contentType">text/octet-stream</param><param name="contentDisposition">attachment;fileName="${fileName}"</param><param name="inputName">downloadFile</param><param name="bufferSize">4096</param></result></action></package></struts>

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

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


第四、是带有下载链接的jsp页面:
<%@ taglib prefix="s" uri="/struts-tags"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";int i = 1;%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><base href="<%=basePath%>"></head><body><table><tr><td>png</td><td><s:a href="download/download?flag=1">下载</s:a></td></tr><tr><td>chm</td><td><s:a href="download/download?flag=2">下载</s:a></td></tr></table></body></html>

最后、把 "hibernate对象状态转换.png"、"jquery1.8.3_20121129.chm"两个文件放在"/filedownload/"下,部署项目,try一下吧。

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




原创粉丝点击