Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载

小编 2026-07-13 阅读:129 评论:0
使用Response下载文件,servlet中的文件下载是通过流来实现的      我在webR...
  • 使用Response下载文件,servlet中的文件下载是通过流来实现的

      我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很简单,只有一个a标签.

    DownloadAction如下:

Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
package com.wang.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;public class DownloadAction {    public String execute() throws IOException{        //获取response和request        HttpServletRequest request=ServletActionContext.getRequest();        HttpServletResponse response=ServletActionContext.getResponse();        //获取要下载的文件夹路径        String path=request.getRealPath("/from");        File file=new File(path,"IMG_0968.jpg");         response.setContentLength((int)file.length());        response.setCharacterEncoding("utf-8");        //此contenttype意思是不知道文件类型,使用二进制流的方式传输        response.setContentType("application/octet-stream");        //注意,filename=后面的内容不加引号,我第一次加了引号,结果出错        response.setHeader("Content-Disposition", "attachment;filename=IMG_0968.jpg");                InputStream is=new FileInputStream(file);        //通过response获得输出流        OutputStream os=response.getOutputStream();        byte[] b=new byte[1024];        int len=0;        while((len=is.read(b))!=-1){            os.write(b, 0, len);        }        is.close();        os.close();        System.out.println("success download");        //注意:这里返回的是null        return null;    }}
DownloadAction

    这是使用servlet的reqsponse下载文件的方式,注意在action中,返回值是null,配置文件中不需要result标签,download.jsp和struts.xml省略.

  • 使用Struts2的StreamResult进行文件下载.

    webRoot文件夹下新建了一个文件夹from,里边放了两张图片分别是IMG_0968.jpg和IMG_0975.jpg.以下载这两张图片为例:

    downLoad.jsp页面:

<body>   <a href="streamDownload.action?fileName=IMG_0968.jpg">流的方式下载第一张图片</a><br>   <a href="streamDownload.action?fileName=IMG_0975.jpg">流的方式下载第二张图片</a>    </body>

    StreamDownloadAction页面:

Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
package com.wang.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class StreamDownload extends ActionSupport{    private String fileName;    @Override    public String execute() throws Exception {        return SUCCESS;    }        public InputStream getInputStream() throws IOException{                HttpServletRequest request = ServletActionContext.getRequest();        String path=request.getRealPath("/from");        InputStream is=new FileInputStream(new File(path,fileName));        return is;    }    public String getFileName() {        return fileName;    }    public void setFileName(String fileName) {        this.fileName = fileName;    }    }
StreamDownloadAction

    struts.xml页面:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="default" namespace="/" extends="struts-default">    <action name="streamDownload" class="com.wang.action.StreamDownload">        <result type="stream">            <!-- inputName默认就是InputStream,可以省略,也可以自己修改,如改成aaa,                则Action里的方法也要改成public InputStream getAaa() -->            <param name="inputName">InputStream</param>            <param name="contentDisposition">attachment;fileName=${fileName}</param>        </result>    </action></package></struts>  

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表