11.3  Struts 2控制文件下载

文件下载相对于文件上传要简单得多,最简单的方式就是直接在页面上给出一个下载文件的链接,使用Struts 2框架来控制文件的下载,关键是需要配置一个stream类型的结果,需要指定下面4个属性。

 contentType属性:指定被下载文件的文件类型。

 inputName属性:指定被下载文件的入口输入流。

 contentDisposition属性:指定下文件的文件名称。

 bufferSize属性:指定下载文件时的缓冲区大小。

配置上面4个属性,既可以在配置文件中配置,也可以在Action中设置该属性来完成配置。

11.3.1  在配置文件中指定下载资源

下面给出在配置文件中指定下载资源的示例,如代码11.9所示。

代码11.9  文件下载业务控制器

 

转:Struts 2 下载文件(12)上package ch11;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上
import java.io.InputStream;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上
import org.apache.struts2.ServletActionContext;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上
import com.opensymphony.xwork2.Action;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上
public class FileDownloadAction implements Action {
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    
private String inputPath;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    
public void setInputPath(String value) {
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上        inputPath 
= value;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    }

转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    
//返回一个InputStream类型值
转:Struts 2 下载文件(12)上

转:Struts 2 下载文件(12)上    
public InputStream getInputStream() throws Exception {
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上        
return ServletActionContext.getServletContext().getResourceAsStream (inputPath);
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    }

转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    
public String execute() throws Exception {
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上        
return SUCCESS;
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上    }

转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上}

转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上

 

Action非常简单,并没有其他特殊之处,关键在于配置文件中关于该Action的配置,其内容如下所示:

 

转:Struts 2 下载文件(12)上<!--配置文件定义文件下载-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上        
<action name="download" class="ch11.FileDownloadAction">
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上            
<!--指定下载资源位置-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上            
<param name="inputPath">/upload/struts-power.gif</param>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上            
<!--指定success逻辑视图为一个stream类型,即流视图-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上            
<result name="success" type="stream">
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<!--下载文件的类型-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<param name="contentType">image/gif</param>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<!--下载文件位置-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<param name="inputName">inputStream</param>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<param name="contentDisposition">
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                    filename="struts.gif"
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
</param>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<!--缓冲区大小-->
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上                
<param name="bufferSize">4096</param>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上            
</result>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上
</action>
转:Struts 2 下载文件(12)上
转:Struts 2 下载文件(12)上

 

读者可以看到,该Action指定了一个success返回逻辑视图,该视图类型为stream,即一个流类型,即需要下载的资源流。本示例中,在该success逻辑视图中增加了4个参数,参数contentType指定了下载资源的类型;inputName参数和contentDisposition参数指定了下载资源的位置;bufferSize参数指定了下载资源的缓冲区大小。

Action配置中,初始化了一个inputPath参数,即指定了下载资源的Web相对位置。读者可以运行该示例,在浏览器中输入http://localhost:8080/bookcode/ch11/download.action,结果如图11.11所示。

转:Struts 2 下载文件(12)上

11.11  Struts 2控制文件下载界面

 

相关文章: