struts2学习笔记之文件下载

文件下载最重要的是设置响应头:


1 contentType,指定文件的MIME类型,使浏览器获知。如doc文件可以如下设置:application/msword
2 contentDisposition,告知文件名称如:attachment;filename="download.jpg"

   其中attachment非常重要,它将指示浏览器文件将作为附件形式下载;

    如果没有这一项,浏览器将自己根据contentType进行判断处理:比如text/plain、 text/html 、image/jpg 之类的将被直接显示在浏览器窗口中而不是执行正常的下载。

 

struts2中实现文件下载非常方便,以下是例子:


Action的实现:

public class DownloadAction extends ActionSupport{
       private String file;   //请求下载的file名称
       public void setFile(String file){
		this.file = file;
	}
	public String execute(){
                //不一定直接返回SUCCESS,可以根据需要进行一些权限验证之类的操作
		return SUCCESS;
	}
	
        //使用该get形式的方法返回一个InputStream,在struts.xml中对应配置上targetFile属性
	public InputStream getTargetFile()throws Exception{
		System.out.println(this.file);
		InputStream is = ServletActionContext.getServletContext().getResourceAsStream(this.file);
		System.out.println(is);
		return is;
	}
}


struts.xml的配置:

<action name="download" class="upload.DownloadAction">
          <!--stream类型 -->
	  <result name="success" type="stream"> 
           <!-- 配置对应的inputstream获取属性-->
	   <param name="inputName">targetFile</param>    
           <!-- 配置contentType -->
	   <param name="contentType">image/jpg</param>
           <!-- 配置contentDisposition,其中attachment很重要-->
	   <param name="contentDisposition">attachment;filename="download.jpg"</param>
           <!-- 写出文件的缓冲大小 -->
	   <param name="bufferSize">4096</param>
	  </result>
</action>

 

下载页面示例:

<form action="download.action" method="post">
    图片文件路径:<input type="text" name="file" value="/images/flowers.jpg" /><br/>
   <input type="submit" value=“下载"/>
</form>




posted @ 2011-09-11 10:23  美码师  阅读(171)  评论(0编辑  收藏  举报