Struts2文件下载

11 篇文章 0 订阅

  FileDownloadAction:这个Action负责文件的下载控制。

  Action中的fileName:接收请求传递的文件名(实际上是从页面传递过来)。

  Action中的getInputStream()方法:以流的形式读取文件,是下载文件的入口。 

复制代码
package com.test.action;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;


/**
 * 文件下载
 * @author Luxh
 */
public class FileDownloadAction extends ActionSupport {


    private static final long serialVersionUID = -3036349171314867490L;
    
    //文件名
    private String fileName;
    
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) throws UnsupportedEncodingException {
        //用UTF-8重新编码文件名,解决中文乱码
        this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
    }
    
    public InputStream getInputStream() throws UnsupportedEncodingException, FileNotFoundException{
        HttpServletResponse response = ServletActionContext.getResponse();
        //attachment,以附件的方式下载文件,会打开保存文件对话框;inline,以内联的方式下载,浏览器会直接打开文件
        response.setHeader("Content-Disposition", "attachment;fileName="
                  + java.net.URLEncoder.encode(fileName,"UTF-8"));//java.net.URLEncoder.encode(fileName,"UTF-8")  编码转换,解决乱码
         
        //如果fileName是相对路径
        //return ServletActionContext.getServletContext().getResourceAsStream(fileName);
        //如果fileName是绝对路径
        return new FileInputStream(fileName);
    }
    
    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
    
    

}
复制代码

  struts.xml配置文件:

复制代码
<action name="fileDownload" class="com.test.action.FileDownloadAction">
             <result name="success" type="stream">
                  <!-- 下载文件类型定义 --> 
                  <param name="contentType">application/octet-stream</param>
                  <!-- 下载文件流定义 --> 
                  <param name="inputName">inputStream</param>
            

            <!-- 下载文件处理方式 --> 
            <param name="contentDisposition">attachment;filename="${fileName}"</param>



                  <!-- 下载文件的缓冲大小 -->
                  <param name="bufferSize">4096</param>
             </result>
         </action>
复制代码

  jsp页面:

1  <a href="fileDownload.action?fileName=<s:property value='myfilepath'/>">文件下载</a>

  fileName的值在生成页面的时候动态生成。

  如果报inputStream流找不到的异常,需要注意文件名是相对路径还是绝对路径,用相应的方法。

 转自:http://www.cnblogs.com/luxh/archive/2012/05/17/2506707.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值