博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
阅读量:6908 次
发布时间: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/

你可能感兴趣的文章
用户如何获得***服务---步骤与效果
查看>>
安全运维之端口安全
查看>>
【转载】什么是站点,Active Directory系列之十一
查看>>
Red Hat Enterprise Liunx6 配置apache 全攻略
查看>>
[Template]HTML Template 简介
查看>>
我的友情链接
查看>>
禁止 centos 休眠
查看>>
亚马逊的EC2云计算系统
查看>>
SCOM2012功能测试(14)—创建.NET应用程序性能监控
查看>>
IEnumerable和IEnumerable<T>接口
查看>>
A.约数个数的和
查看>>
BZOJ1041:[HAOI2008]圆上的整点(数论)
查看>>
双色球
查看>>
生成XML文件,并保存到本地文件
查看>>
C# 中的 App.config 文件配置
查看>>
删除一个链表中的重复元素
查看>>
Linux 2440 LCD 控制器【转】
查看>>
metabase实施文档
查看>>
差分约束 【bzoj2330】[SCOI2011]糖果
查看>>
CSS overflow 属性
查看>>