jfinal框架文件下载功能代码

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72779838 一. 前言   上一篇博客我们了解了struts2框架的文件下载功能代码,我们可以从中总结到,struts2主要是通过其xml的配置来处理文件下载的,也就是将普通io流文件下载的页面响应方式的这部分代码分离出来,使用xml配置来处理,这也是struts2的特性。
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72779838

一. 前言
  上一篇博客我们了解了struts2框架的文件下载功能代码,我们可以从中总结到,struts2主要是通过其xml的配置来处理文件下载的,也就是将普通io流文件下载的页面响应方式的这部分代码分离出来,使用xml配置来处理,这也是struts2的特性。那么针对于jfinal框架,其在处理文件下载方面会不会有什么特殊的处理方式呢?
  那么,今天我们将重点放在jfinal框架的文件下载功能方面,直接切入主题:

二. 实例

  1. 一般需要加入的jar包:
  commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar,点击下载jar包

  2. jfinal的config常量的配置:

    /** 配置常量 */
    public void configConstant(Constants me) {

        me.setBaseDownloadPath("upload");        //设置文件下载的默认基础路径

    }

  3. 方法实例1:

    //jfinal文件下载
    //jfinal框架下载装了所有的输入输出流方法,但在实际运行中很容易出现浏览器的兼容问题,所以在项目中谨慎使用
    public void downloadFile() throws IOException{

        //通过pathkit.getwebrootpath获取项目的根目录,或者在config配置默认的文件下载根路径
        String basePath = PathKit.getWebRootPath() +"/upload/jpg";

        //获取前台的传递的文件名(包括文件格式,例如"test.jpg")
        String fileName = getPara("downFileName");

        //根据根目录和文件名,拼接成完整的file路径
        String targetPath = basePath+File.separator+fileName;

        //该相对路径用于测试使用config配置默认下载的根路径功能
        String fileName2 = "/jpg"+File.separator+fileName;

        //方法1-1:在config配置默认下载的基础路径下,获取文件的相对路径,弹出下载框
        renderFile(fileName2);      
        //jfinal3.1的新特性,可自定义下载名,下载名需自行添加后缀格式
        //renderFile(fileName2,"自定义新的文件名.jpg");

        //方法1-2:jfinal提供了一个重载方法专门应根据绝对路径下载文件的需求,可以下载任意地方的文件
        //renderFile(new File(targetPath));

    }

  4. 方法实例2:

    //jfinal文件下载,使用普通io流方式下载
    public void downloadFile() throws IOException{

        //通过pathkit.getwebrootpath获取项目的根目录,或者在config配置默认的文件下载根路径
        String basePath = PathKit.getWebRootPath() +"/upload/jpg";

        //获取前台的传递的文件名(包括文件格式,例如"test.jpg")
        String fileName = getPara("downFileName");

        //根据根目录和文件名,拼接成完整的file路径
        String targetPath = basePath+File.separator+fileName;

        //普通IO流实现下载的功能
        HttpServletResponse res = getResponse(); //创建response回应
        res.setContentType("text/html; charset=UTF-8"); //设置编码字符
        res.setContentType("application/x-msdownload"); //设置内容类型
        res.setHeader("Content-disposition", "attachment;filename="+fileName);//设置下载的文件名称
        OutputStream out = res.getOutputStream();   //创建页面返回方式为输出流,可弹出下载框

        //创建输入流读取文件
        InputStream is = new FileInputStream(targetPath); 
        byte[] Buffer = new byte[4096];
        int size = 0; 
        while((size=is.read(Buffer)) != -1){
            out.write(Buffer, 0, size); 
        }

        //关闭和释放流
        out.flush();
        out.close();
        is.close();
        renderNull();
    }

三. 总结
  1.从实例1可以看出,jfinal实现文件下载功能是非常简单的,只需要一个renderFile()渲染方法,因为jfinal已经封装了所有的输入输出流方法,程序员只需要提供文件路径即可实现下载功能,只需写几行代码就可以打完收枪,也体现了jfinal的“没有繁琐、没有复杂,只有妙不可言”的特点;

  2.然而,为什么在这里我会添加多一个在jfinal框架里面使用普通io流下载文件的方法,因为使用jfinal框架的renderFile文件下载方法并不是对所有的浏览器都能有效兼容,比如ie浏览器就没办法实现(可能本人测试没办法实现,如果有实现的方法可多交流),而且极容易出现jetty服务器的io流异常:
com.jfinal.render.RenderException: 和org.eclipse.jetty.io.EofException
,虽然前台下载文件没问题,但后台却总会报错(这个问题本人没有解决,若有解决办法,可否告知),所以在项目中需谨慎使用框架自带的下载方法;

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


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


下一篇:java文件上传功能代码 —— 普遍适用

相关文章
|
3月前
|
前端开发 JavaScript UED
JFinal框架中防止表单重复提交的方法
每种方法都有其优势和局限性。Token机制能提供较为稳定可靠的保护,但增加了服务器端的处理负担。锁定机制在处理并发请求时更有效,但可能导致用户体验的下降。JavaScript客户端控制提供了良好的用户体验,但依赖于客户端的执行环境。在实际应用中,可以根据具体的场景和需求,选择最适合的方法,或者将多种方法组合使用,以达到最佳的效果。
45 10
|
JavaScript 前端开发 Java
JFinal框架单文件、多文件上传详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79386540 简介  ...
2793 0
|
Java PHP Spring
从今天开始,要入jfinal的坑了,试试这破框架好不好用。
公司要用jfinal,所以我要入坑了。 听说时去年很火的java框架,不知好不好,试试水吧。 看官网就想吐槽 看个文档吧,还要注册。。。现在是2017年吗?? 好吧,注册完了,接着就。
2029 0
|
Java 调度 Maven
JFinal框架_定时触发程序
JFinal框架进行作业调度,使用JFinal-ext2与quartzf进行配置。 maven说明: com.jfinal jfinal 3.2 com.jfinal jfinal-ext2 2.
1710 0
|
Java
基于Java的JFinal框架快速上手
http://finalshares.com/read-737
1186 0
|
Oracle 关系型数据库 Java
jfinal框架教程-学习笔记(二)
上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1、建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLASSES ( classesid NUMB...
1314 0
|
XML Java 数据格式
快速的搭建JFinal的ORM框架示例
  分类: Java2013-12-11 20:55 11075人阅读 评论(12) 收藏 举报 刚把Spring MVC搭建完毕,在群里一个人问如何搭建JFinal + Httl,我就先打架了一个JFinal环境。
1182 0
|
Java
Springboot简单实现文件上传
Springboot简单实现文件上传
132 0