struts2 文件下载配置xml与方法的写法

本文详细介绍Struts2框架中实现文件下载的具体步骤,包括配置XML、下载方法及流处理方式,确保用户能够正确下载所需文件。

struts2 文件下载

  • 请求下载
	// data 为下载内容的集合
	window.open('download.action?inputPath=' + data.Path + data.Name 
						+ '&fileName=' + data.Name);
  • 配置xml
<!--name 为ajax调用的方法名 class 对应下载方法位置 -->  
<action name="download" class="com.unmi.action.DownloadAction">       
     <result name="success" type="stream"><!--type 为 stream 应用 StreamResult 处理-->       
         <param name="contentType">application/octet-stream</param><!--默认为 text/plain-->       
               
         <!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,       
               比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->       
         <param name="inputName">inputStream</param>       
                
         <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文       
               件保有存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名,       
              这里使用的是动态文件名,${fileName}, 它将通过 Action 的 getFileName() 获得文件名 -->       
         <param name="contentDisposition">attachment;filename="${fileName}"</param>       
         <param name="bufferSize">4096</param><!-- 输出时缓冲区的大小 -->       
     </result>       
</action>    
  • 下载方法
package com.unmi.action;       
        
 import java.io.*;       
 import java.text.*;       
 import java.util.Date;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;       
        
 /**     
  * 文件下载的 Action      
  * @author Unmi     
  */       
 public class DownloadAction{       
     private String inputPath; // 下载文件路径
     private String fileName;// 文件名
   //  public String execute() throws Exception {       
         //这里可加入权限控制       
      //   return "success";       
    // }       
        
     	// 返回一个InputStream类型
	public InputStream getInputStream() {
		InputStream inputStream = null;
		
		try {
			// 使用此方法,查看电子原文后,文件被占用,不能删除
//			inputStream = new ByteArrayInputStream(
//					FileReadUtils.toByteArray3(inputPath));
			
			inputStream = new BufferedInputStream(
					new FileInputStream(inputPath));
		} catch (Exception e) {
			 e.printStackTrace();
		}
		return inputStream;
	}       
       
     //对于配置中的 ${fileName}, 获得下载保存时的文件名       
     public String getFileName() {       
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");       
         String fileName = "序列号(" + df.format(new Date()) + ").txt";       
         try {       
             //中文文件名也是需要转码为 ISO8859-1,否则乱码       
             return new String(fileName.getBytes(), "ISO8859-1");       
         } catch (UnsupportedEncodingException e) {       
             return "impossible.txt";       
         }       
     } 
	public void setFileName(String fileName)
			throws UnsupportedEncodingException {
		/*
		 * if(org.apache.commons.lang.StringUtils.isNotBlank(fileName)) {
		 * fileName = new String(fileName.getBytes(), "UTF-8"); }
		 */
		this.fileName = fileName;
	}
	public String getInputPath() {
		return inputPath;
	}

	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}      
 }       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值