ssh框架之struts2文件下载功能代码

一、前言
  上一篇博客我们了解了ssh框架的springmvc的文件下载功能,它在方法里面并不需要设置返回的http的类型和标题,但也能自动弹出下载框,这就是框架本身的一个优点,封装了原生java的方法。
  不同框架的对文件下载的方式也不尽相同,那么,今天我们将重点放在ssh中的struts2的文件下载方式,直接切入主题:
  
二、实例

  1. xml配置

    <!-- action的type设置成stream,inputName为方法内部的输入流名称,xml会自动识别 -->
    <action name="download_*" class="downloadAction" method="{1}">  
        <result name="downloadfile" type="stream">   <!--定义返回值为流-->
            <param name="contentType">image/jpeg</param>  <!--返回文件类型-->
            <param name="inputName">inputStream</param>  <!--方法内部使用的流的名称-->
            <!--文件下载的处理方式--> 
            <param name="contentDisposition">attachment;filename="${fileName}"</param>    
            <param name="bufferSize">2048</param>  <!--下载缓冲区的大小-->
        </result> 
        <result name="error">error.jsp</result> 
    </action>   

    <!--参数说明:
        1、type 需设置成 stream ,表明该返回值为流

        2、contentType

           内容类型,和互联网MIME标准中的规定类型一致,例如application/vnd.ms-excel代表excel表格,
           text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片;
           如果不写,则会匹配所有的文件,也就是所有的文件都可以下载;

        3、inputName

          下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,
            例如取值为inputStream的属性需要编写getInputStream()方法

        4、contentDisposition

          文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,
            否则浏览器会尝试直接显示文件。取值为:attachment;filename="test.jpg",表示文件下载的时候保存
            的名字应为test.jpg。如果直接写filename="test.jpg",那么默认情况是代表inline,浏览器会尝试
            自动打开它,等价于这样的写法:inline;filename="test.jpg"

        5、bufferSize

          下载缓冲区的大小,默认为1024字节,可自行定义
    -->

  2.方法实例

    //从前台获取的文件名(包括文件格式,例如"test.jpg")
    private String fileName;  

    //定义输入流,名称和xml里面的<param name="inputName">的名称一样
    private InputStream inputStream;  

    //定义好set和get方法,可自动获取匹配
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    //返回时xml会根据输入流名称,识别方法内部的输入流
    public String qtDownloadFile() throws FileNotFoundException{

        //获取需要下载的文件的相对文件夹路径
        String basePath = ServletActionContext.getServletContext().getRealPath("/file");

        //根据文件夹路径和文件名,创建file文件
        File file = new File(basePath,fileName); 

        //用输入流读取文件
        inputStream = new FileInputStream(file);    

        return "downloadfile";  //返回的是xml的对应的action的名称
    }

三、总结

  1.ssh框架的文件下载功能也比较容易实现,在controller层使用的代码不多,就是将文件使用输入流读取就可以了,而需要特别注意的地方就是xml的配置,因为struts2的返回文件下载处理方式基本是交给了xml去控制,将文件下载的xml的基本配置搞明白了之后基本上也就没什么难度了;

  2.实践是检验认识真理性的唯一标准,根据代码和注释多进行尝试,则很快就会明白其中的原理

上一篇:ssh框架之springmvc文件下载功能代码

下一篇:jfinal框架文件下载功能代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值