为什么要用strtus2进行文件下载,因为如果你要下载的文件是中文名字,那么如果直接在页面生成一个超链接的话会造成404错误。前台向后台请求的是一串 unicode ,所以我们用基于strtus上面开发这个功能比较轻松.
1.创建一个普通的Action
代码如下 | 复制代码 |
package org.Rudiment.action; import java.io.InputStream; public class FileDownloadAction extends ActionSupport |
2.配置我们的 strtus.xml 文件,我们上面的action配置如下:
代码如下 | 复制代码 |
<action name="down" class="org.Rudiment.action.FileDownloadAction" > <param name="inputPath">不懂.png</param> <result name="success" type="stream"> <param name="contentType">image/png</param> <param name="inputName">targetFile</param> <param name="contentDisposition">attachment;filename="test_img.png"</param> <param name="bufferSize">4096</param> </result> </action> |
配置参数说明:
<param name="inputPath">不懂.png</param> 给Action中的 inputPath 变量传值
contentType
内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
inputName
下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为 targetFile 的属性需要编写getTargetFile()方法
contentDisposition
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:
attachment;filename="struts2.txt" ,表示文件下载的时候保存的名字应为struts2.txt 。如果直接写filename="struts2.txt" ,那么默认情况是代表inline ,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="struts2.txt"
bufferSize
下载缓冲区的大小
注:别忘记在Web应用根目录下面放一张 不懂.png 图片,不然会找不到文件而出错。
有时候当我们需要用户登录的时候才可以下载特定的文件。这个时候我们可以用以下的方法来实现。
1.我们负责相应下载请求的Action的源码如下:
代码如下 | 复制代码 |
package org.Rudiment.action; import java.io.InputStream; public class FileDownloadAction extends ActionSupport @Override |
2.strtus.xml 对应Action 的配置文件如下:
代码如下 | 复制代码 |
<action name="down" class="org.Rudiment.action.FileDownloadAction" > <param name="inputPath">不懂.png</param> <result name="success" type="stream"> <param name="contentType">image/png</param> <param name="inputName">largetFile</param> <param name="contentDisposition">attachment;filename="test_img.png"</param> <param name="bufferSize">4096</param> </result> <result name="input">/login.jsp</result> </action> |
注:通过对execute()中添加一个判断条件,判断当前的用户是否有权限来下载文件,通过返回逻辑视图(INPUT SUCCESS ERROR)这些就是逻辑视图。来控制对客户端的响应