struts2文件下载

<!-- 文件下载 -->
        <action name="download" class="cn.action.demo2.DownloadAction">
            <!-- 返回 流结果 -->
            <result type="stream">
                <!-- inputName 用于指定 返回输入流的方法名 默认值  inputStream -->
                <!-- targetFile 需要在Action 中提供 getTargetFile方法,返回值必须InputStream -->
                <param name="inputName">targetFile</param>
                <!-- 配置ContentType -->
                <!-- ${contentType}从Action中 getContentType 获得文件类型 -->
                <param name="contentType">${contentType}</param>
                <!-- 设置响应数据 以附件形式打开  -->
                <param name="contentDisposition">attachment;filename=${filename}</param>
            </result>
        </action>
public class DownloadAction extends ActionSupport{
    // 接收文件名
    private String filename;

    @Override
    public String execute() throws Exception {
        // 解决请求参数中文件名get乱码
        filename = new String(filename.getBytes("ISO-8859-1"),"utf-8");

        return SUCCESS;
    }

    public String getFilename() throws IOException {
        // 对文件名 进行编码,用于附件下载
        String agent = ServletActionContext.getRequest().getHeader("user-agent");
        System.out.println(agent);
        if(agent.contains("Firefox")){
            // 火狐浏览器 Base64编码
            return "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
        }else{
            // IE及其它浏览器--- URL编码
            return URLEncoder.encode(filename, "utf-8");
        }
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    // getTargetFile方法名 因为配置 <param name="inputName">targetFile</param>
    public InputStream getTargetFile() throws IOException{
        // 获得download 目录 绝对路径
        ServletContext servletContext = ServletActionContext.getServletContext();
        String downloadDir = servletContext.getRealPath("/download");
        return new BufferedInputStream(new FileInputStream(new File(downloadDir, filename)));
    }

    // <param name="contentType">${contentType}</param>
    public String getContentType(){
        // 文件类型 由文件名动态获得
        ServletContext servletContext = ServletActionContext.getServletContext();
        // 查找tomcat/conf/web.xml
        return servletContext.getMimeType(filename);
    }

}
时间: 2024-12-24 12:48:03

struts2文件下载的相关文章

Struts2文件下载&lt;*&gt;servlet-api的方式文件下载

Struts2文件下载 1 public class DownLoadAction extends ActionSupport{ 2 3 private static final long serialVersionUID = 1L; 4 //要下载的文件名 5 private String filename; 6 public String getFilename() { 7 return filename; 8 } 9 public void setFilename(String filen

解决struts2文件下载中文名问题

package com.bgsnewlook.action; import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext; import java.io.InputStream; import java.net.URLEncoder; public class Download extends ActionSupport {    private String inputP

struts2文件下载及 &lt;param name="inputName"&gt;inputStream&lt;/param&gt;的理解

struts.xml文件配置: [html] view plaincopy <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" &q

Struts2之struts2文件下载详解

一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(downloadfile.jsp)创建下载文件的链接 <a href="downloadFile">下载文件</a> b)创建action(DownloadFileAction.java) 只需创建一个InputStream类型类型的get方法. 注意:此处方法名规则为

struts2文件下载,动态设置资源地址

转自:http://blog.csdn.net/ctrl_shift_del/article/details/6277340 1 ServletActionContext.getServletContext().getResourceAsStream("/"+tempfile); 这是java加载资源的方法,所谓资源,实际上是任何一个文件,但特别的 是,getResourceAsStream这个方法不使用绝对路径,而是使用相对于classpath环境变量的相对路径.所 以,如果写: 1

struts2文件下载 &lt;result type=&quot;stream&quot;&gt;

<!--struts.xml配置--> <action name="download" class="com.unmi.action.DownloadAction"> <result name="success" type="stream"><!--type 为 stream 应用 StreamResult 处理--> <param name="contentTy

struts2——文件下载自定义文件名,包括中文

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib uri="/struts-tags" prefix="s"%> 4 <!DOCTYPE html> 5 <html> 6 <head> 7 &l

struts2文件下载相关信息

struts.xml文件配置: [html] view plaincopy <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" &q

struts2 文件下载 报错

程序错误: 学习struts框架时,关于文件下载部分,利用struts中的stream结果类型来实现,配置完成之后,运行程序,报错如下: HTTP Status 500 - Can not find a java.io.InputStream with the name [downFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 错

struts2文件下载出现Can not find a java.io.InputStream with the name的错误

今天在用struts2就行文件下载时出现如下错误: Servlet.service() for servlet default threw exception java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack. Check the <param name="inputName">