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

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72764335 一、前言   上一篇博客我们了解了ssh框架的springmvc的文件下载功能,它在方法里面并不需要设置返回的http的类型和标题,但也能自动弹出下载框,这就是框架本身的一个优点,封装了原生java的方法。
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72764335

一、前言
  上一篇博客我们了解了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框架文件下载功能代码

相关文章
|
4月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
244 0
|
7月前
|
存储 Java 应用服务中间件
SSH开发模式——Struts2进阶
SSH开发模式——Struts2进阶
|
6月前
|
Java 关系型数据库 MySQL
JSP SSH公车拍卖系统myeclipse开发mysql数据库bs框架java编程网结构
JSP SSH公车拍卖系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
49 0
|
3月前
|
前端开发 Java 网络安全
基于SSH框架甜品商城管理系统【源码+数据库】
基于SSH框架甜品商城管理系统【源码+数据库】
|
6月前
|
前端开发 Java 关系型数据库
JSP仓库进销存系统ssh框架mysql数据库myeclipse开发mvc结构java
JSP 仓库进销存系统(struts2+hibernate) 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
31 0
|
6月前
|
Shell Linux 网络安全
git实战—Gerrit配置SSH key & 下载代码到本地 & 使用VScode编辑器编辑提交代码——2023.07
git实战—Gerrit配置SSH key & 下载代码到本地 & 使用VScode编辑器编辑提交代码——2023.07
306 0
|
6月前
|
网络协议 Ubuntu Linux
无公网IP内网穿透使用vscode配置SSH远程ubuntu随时随地开发写代码-2
无公网IP内网穿透使用vscode配置SSH远程ubuntu随时随地开发写代码
|
6月前
|
Ubuntu 网络安全 数据安全/隐私保护
无公网IP内网穿透使用vscode配置SSH远程ubuntu随时随地开发写代码-1
无公网IP内网穿透使用vscode配置SSH远程ubuntu随时随地开发写代码
|
7月前
|
Java 网络安全 Spring
SSH框架学习中遇到的问题
SSH框架学习中遇到的问题
32 0
|
8月前
|
Linux 网络安全 数据安全/隐私保护