博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
阅读量:6910 次
发布时间:2019-06-27

本文共 2990 字,大约阅读时间需要 9 分钟。

  • 使用Response下载文件,servlet中的文件下载是通过流来实现的

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

    DownloadAction如下:

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页面:

    StreamDownloadAction页面:

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页面:

InputStream
attachment;fileName=${fileName}

 

转载地址:http://vrycl.baihongyu.com/

你可能感兴趣的文章
REST接口
查看>>
Dockerfile文件详解
查看>>
使用睿云智合开源 Breeze 工具部署 Kubernetes v1.12.3 高可用集群
查看>>
C++中 int main(int argc, char **argv) 命令行传递参数
查看>>
ORACLE导入、导出所有数据到文件的SQL语句
查看>>
{section}
查看>>
16进制 <--转换--> 10进制(RGB)
查看>>
图的存储结构(邻接矩阵)
查看>>
OD使用教程14(山外有山) - 调试篇14
查看>>
逻辑运算符
查看>>
PE格式详细讲解6(下)- 系统篇06|解密系列
查看>>
POJ-3278-Catch That Cow(BFS)
查看>>
模板:cin.getline用法
查看>>
表单插件——form
查看>>
Oracle 服务命名(别名)的配置及原理,plsql连接用
查看>>
【转】JavaScript 中值得注意的 for 循环
查看>>
【哈佛商评】好编辑成就内容营销
查看>>
【视频】真实的北漂程序员生活记录
查看>>
HTML 获取屏幕、浏览器、页面的高度宽度
查看>>
近日经验总结
查看>>