转帖 谢谢
说明:
下载是通过StreamResult类来实现,这是一个自定义结果类型,主要作用是直接向HttpServletResponse对象发送原始数据。 StreamResult假定Action会提供一个输入流的访问方法,并将这个输入流输出到响应对象中。
SteamResult还提供如下配置属性:
contentType :
内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
inputName :
下载文件的来源流,对应着action类中某个类型为Inputstream的方法名,例如取值为inputStream的属性需要编写getInputStream()方法
contentDisposition :
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:
attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="struts2.txt"
bufferSize :
下载缓冲区的大小。
在这里面,contentType属性和contentDisposition分别对应着HTTP响应中的头Content-Type和Content-disposition头
下面是一个StreamResult的配置示例:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="xg" namespace="/" extends="struts-default"> <action name="ProjectNeedsAction" class="projectNeedsAction" > <!-- 下載配置 --> <result name="success" type="stream"> <!-- 下載類型和編碼配置 --> <param name="contentType"> application/octet-stream;charset=UTF-8</param> <!-- action中提供输入流的方法名称,缺省为inputStream --> <param name="inputName">inputStream</param> <!-- 指定下載名:name对应action类中的方法 getName() --> <param name="contentDisposition">attachment;filename="${name}"</param> <!-- 緩存 --> <param name="bufferSize">4096</param> </result> </package> </struts>