版权声明:本文为博主原创文章,如需转载,请标明出处。 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',
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',
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>
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 = "";
public static int maxPostSize = 1024 * 1024 * 1024;
/**
*配置常量
*/
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(){
private final int maxSize = 100 * 1024 * 1024;
private String filedir=PathKit.getWebRootPath()+"/text";
UploadFile upFile = getFile("fileText",filedir,maxSize,"UTF-8");
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));
String otherParameter = getPara("otherValue");
System.out.println("获取到的额外的参数:"+otherParameter);
System.out.println("1:"+upFile.getFileName()+" 2:"+upFile.getOriginalFileName()+" 3:"+upFile.getUploadPath());
System.out.println("文件:"+upFile.getFile()+" 4:"+upFile.getContentType());
String path = PathKit.getWebRootPath();
System.out.println(path);
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.实践是检验认识真理的唯一标准,代码好不好用,何不亲自动手实践看看;