JFinal框架单文件、多文件上传详解

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79386540 简介 ...
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79386540

简介

  1.上一篇博客我们讲解了SSH框架之SpringMVC的文件上传代码,那么本片博客将会重点讲解JFinal国产框架的单文件、多文件上传;
  2.JFinal封装了所有的输入输出流,使用自身的类去处理上传的文件;
  3.JFinal在使用自身特性的同时,也包含提供了常用的处理文件的方法;
  4.本篇实例将会分成四个步骤,给您简单明了走完的JFinal文件上传的整个流程:
  (1).需要的jar包;
  (2).jsp页面;
  (3).config配置(jfinal框架不需要进行xml配置,全部配置可在java类的config类配置);
  (4).后台controller处理方法;

实例

  1.需要提供的jar包:commons.fileupload-1.2.1.jar; commons.io-1.4.0.jar;cos-26Dec2008.jar;
  
  2.jsp页面:
  需要导入的js:jquery.form.js

    <script type="text/javascript" src="jquery.form.js"></script>
    <script type="text/javascript"> 
             //单文件上传文件
             function uploadFile(){
                    var form = $("#uploadFile");  
                    var options  = {    
                        url:'Main/User/uploadFile',    
                        type:'post',
                        //data:{},    
                        success:function(data){
                           var htmlToJson = JSON.parse(data);
                           if(htmlToJson.ifSuccess=="success"){
                                  alert("文件上传成功!");
                           } 
                        }                       
                    };    
                    form.ajaxSubmit(options);                
             }

             //多文件上传
             function moreUploadFile(){
                    var form = $("#moreFile");  
                    var options  = {    
                        url:'Main/User/moreUploadFile',    
                        type:'post',
                        //data:{},    
                        success:function(data){
                           var htmlToJson = JSON.parse(data);
                           if(htmlToJson.ifSuccess=="success"){
                                  alert("文件上传成功!");
                           } 
                        }                       
                    };    
                    form.ajaxSubmit(options);                
             }

    </script>

    <form id="uploadFile" enctype="multipart/form-data">
        <span>文件上传:</span>
        <input type="file" id="fileText" name="fileText" placeholder="请选择文件"/><br><br>
        <span>测试其他的参数:</span>
        <input  name="otherValue" value="" placeholder="请输入其余参数"/>
        <a href="javascript:void(0)" onclick="uploadFile()" >上传</a>
    </form>  


    <form id="moreFile" enctype="multipart/form-data">
        <span>多文件上传:</span>
        <input type="file" name="moreFile" multiple="multiple" value="" placeholder="请选择文件"/><br><br>
        <a href="javascript:void(0)" onclick="moreUploadFile()" >上传</a>
    </form>     

<!--注意:要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,

这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点 -->

  3.config的java类配置:

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import com.alan.core.jfinal.plugin.AutoTableBindPlugin;
import com.alan.core.jfinal.plugin.MyRoutesUtil;
import com.alan.core.jfinal.plugin.TableNameStyle;
import com.alan.interceptor.PermitInterceptor;

/**
 * @author hqc
 * API引导式配置
 * 这里只是进行简单配置,其余的详细配置可参考官网
 */
public class JFWebConfig extends JFinalConfig {
    /** 
    *配置全局变量
    */
    public static int pageSize = 20;
    public static String saveDirectory = ""; // 上传文件目录,默认为upload
    public static int maxPostSize = 1024 * 1024 * 1024; // 默认上传文件大小 1G


    /** 
    *配置常量 
    */
    public void configConstant(Constants me) {
        me.setBaseUploadPath("upload");        //设置文件上传默认路径
    }

}

   4.后台controller处理方法:

    /**单文件上传
     * 1. getFile(String parameterName, String uploadPath);
     * 2. uploadPath参数会指定上传路径,但其指定的前提是基础路径,upload,也就是说指定file路径,然后上传的文件的路径为upload/file;
     * 3. 文件上传的基本路径可以在常量进行配置
     * 
     */
    public void uploadFile(){ 
        /*使用UploadFile获取前台文件
        *第一个参数是页面file的name名,第二个参数是指定保存的文件夹,第三个参数是设置文件的最大值,第四个参数是设置文件的编码方式
        *UploadFile  upFile = getFile("fileText", filedir); //或getFile(getPara("fileText"), filedir); 
        */
        private final int maxSize = 100 * 1024 * 1024;
        private String filedir=PathKit.getWebRootPath()+"/text";
        UploadFile  upFile = getFile("fileText",filedir,maxSize,"UTF-8");

        /*对文件进行重命名
        *upFile.getFile().renameTo(dest);可使用file的原生方法去对file进行重命名,
        *jf3.1版本已经添加自定义名称功能,所以这个适合3.1之前的版本使用;
        *根据原文件名使用时间戳和随机数重命名,保存,原来的临时文件会自动删除
        */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
        String fileName = upFile.getFileName();
        String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
        String sqlName = sdf.format(new Date())+(int)(Math.random()*10000)+lastThreeLetter;
        upFile.getFile().renameTo(new File(PathKit.getWebRootPath()+"/upload/file/"+sqlName));

        /*
        *上传文件的同时,如果包含其他的携带的变量 的话需要先使用getFile方法,之后才能获取其他的变量参数
        */
        String otherParameter = getPara("otherValue");
        System.out.println("获取到的额外的参数:"+otherParameter);

        /*
         * jf后台在获取文件的时候可直接获取文件文件的修改名称、原名称、上传保存的路径
         *(getUploadPath(),不包含文件,只到达文件夹;getFile()能够直接获取到文件,包括文件名)、
         * 文件的类型(例如jpeg文件格式,获取到的是image/jpeg)
         */
        System.out.println("1:"+upFile.getFileName()+" 2:"+upFile.getOriginalFileName()+" 3:"+upFile.getUploadPath());
        System.out.println("文件:"+upFile.getFile()+" 4:"+upFile.getContentType());

        /*
         * jf获取文件根路径的方法:
         */
        String path = PathKit.getWebRootPath();
        System.out.println(path);

        /*
         * 1.返回的是text/html,前台需使用json工具转换成json对象才能获取数据,var htmlToJson = JSON.parse(data);
         * 2.如果不包含文件上传的form表单提交异步刷新,则直接使用renderJSON(params);
         */
        String params = "{\"ifSuccess\":\"success\"}";
        render(new JsonRender(params).forIE());

    }

    /**多文件上传
    *多文件上传需要在src下面添加com.oreilly.servlet包,添加MultipartRequest.java的类,用于处理多文件重命名问题
    */
    public void moreUploadFile(){ 

        //统一上传到默认的项目根目录
        List<UploadFile>  upFile = getFiles("file");

        //循环遍历获取文件重命名,如果不需要重命名则无需此步骤
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
        String formatTime = sdf.format(new Date());
        for(UploadFile upf: upFile){
            System.out.println("循环获取文件名:"+upf.getFileName());
            //根据原文件名使用时间戳和随机数重命名,保存,原来的临时文件会自动删除
            String fileName = upf.getFileName();
            String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
            String sqlName =formatTime + (int)(Math.random()*10000)+lastThreeLetter;
            upf.getFile().renameTo(new File(PathKit.getWebRootPath()+"/upload/file/"+sqlName));
        }

        System.out.println("集合长度:"+upFile.size());
        String params = "{\"ifSuccess\":\"success\"}";
        render(new JsonRender(params).forIE());
    }

总结

  1.以上就是JFinal上传文件的全部流程,代码也是简洁方便,对于还不是很了解JFinal上传文件的程序猿还是有帮助的,有需要的可以自行复制代码,然后可以经过自己的进一步加工,形成对自己最有效的一套代码;

  2.JFinal作为国产的优秀框架,不论是在处理上传文件方面,还是在其他的config配置、AOP拦截、数据库连接池等方面都是很优秀的,有兴趣的童鞋可多去了解学习一下这个框架;
     
  3.实践是检验认识真理的唯一标准,代码好不好用,何不亲自动手实践看看;

相关文章
|
3月前
|
前端开发 JavaScript UED
JFinal框架中防止表单重复提交的方法
每种方法都有其优势和局限性。Token机制能提供较为稳定可靠的保护,但增加了服务器端的处理负担。锁定机制在处理并发请求时更有效,但可能导致用户体验的下降。JavaScript客户端控制提供了良好的用户体验,但依赖于客户端的执行环境。在实际应用中,可以根据具体的场景和需求,选择最适合的方法,或者将多种方法组合使用,以达到最佳的效果。
45 10
|
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 数据格式 XML
jfinal框架文件下载功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72779838 一. 前言   上一篇博客我们了解了struts2框架的文件下载功能代码,我们可以从中总结到,struts2主要是通过其xml的配置来处理文件下载的,也就是将普通io流文件下载的页面响应方式的这部分代码分离出来,使用xml配置来处理,这也是struts2的特性。
1761 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
|
7月前
|
Java
SpringBoot之文件上传(单文件与多文件上传的使用)
SpringBoot之文件上传(单文件与多文件上传的使用)