Jfinal框架学习系列之图片上传
昨天学习了一下在jfianl中使用jsp,然后实现了一个基本的增删改查的demo示例,今天了解了一下在jfinal中实现文件上传的功能,这里配合
了uploadify实现图片上传。。。这里只是可以简单地实现上传的功能,有的时候也需要自己进行压缩处理,,,貌似视频上传的时候有些问题。。。因为也是参照51CTO上面的一个demo实现的。。。
工程结构截图:
具体实现代码如下:
1、DemoConfig核心配置类:
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.config;
import com.demo.controller.CommonController;
import com.demo.controller.UploadController;
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.core.JFinal;
import com.jfinal.render.ViewType;
/**
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @Version:V6.0
*/
public class DemoConfig extends JFinalConfig {
/**
* @Discription:常量配置
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @see com.jfinal.config.JFinalConfig#configConstant(com.jfinal.config.Constants)
*/
@Override
public void configConstant(Constants me) {
me.setDevMode(true);
me.setViewType(ViewType.JSP);
}
/**
* @Discription:路由配置
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @see com.jfinal.config.JFinalConfig#configRoute(com.jfinal.config.Routes)
*/
@Override
public void configRoute(Routes me) {
me.add("/", CommonController.class);
me.add("/upload", UploadController.class,"/upload");
}
/**
* @Discription:配置插件
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @see com.jfinal.config.JFinalConfig#configPlugin(com.jfinal.config.Plugins)
*/
@Override
public void configPlugin(Plugins me) {
}
/**
* @Discription:全局拦截器配置
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @see com.jfinal.config.JFinalConfig#configInterceptor(com.jfinal.config.Interceptors)
*/
@Override
public void configInterceptor(Interceptors me) {
}
/**
* @Discription:配置处理器
* @Author: feizi
* @Date: 2015年4月23日 上午11:42:18
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 上午11:42:18
* @see com.jfinal.config.JFinalConfig#configHandler(com.jfinal.config.Handlers)
*/
@Override
public void configHandler(Handlers me) {
}
/**
* 建议使用 JFinal 手册推荐的方式启动项目
* 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
*/
public static void main(String[] args) {
//这里可以修改jetty-server的端口号
JFinal.start("WebRoot", 85, "/", 5);
}
}
2、CommonController类
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.controller;
import com.jfinal.core.Controller;
/**
* CommonController
* @Author: feizi
* @Date: 2015年4月23日 下午12:19:37
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 下午12:19:37
* @Version:V6.0
*/
public class CommonController extends Controller {
public void index(){
render("index.jsp");
}
}
3、UploadController类
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.controller;
import com.jfinal.core.Controller;
import com.jfinal.upload.UploadFile;
/**
* UploadController
*
* @Author: feizi
* @Date: 2015年4月23日 下午12:18:45
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 下午12:18:45
* @Version:V6.0
*/
public class UploadController extends Controller {
public void index() {
// UploadFile uf = this.getFile();
System.out.println(getFile().getFileName());
render("index.jsp");
}
public void uploads() {
// 获取上传的文件
UploadFile uf = getFile("Filedata", "uploads");
// 拼接文件上传的完整路径
String fileName = "http://" + this.getRequest().getRemoteHost() + ":"
+ this.getRequest().getLocalPort() + "/upload/uploads/"
+ uf.getFileName();
this.setAttr("fileName", fileName);
System.out.println("================fileName:"+fileName);
//以json格式进行渲染
renderJson();
}
}
4、UploadInterceptor类
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.interceptor;
import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
/**
* UploadInterceptor拦截器
* @Author: feizi
* @Date: 2015年4月23日 下午1:12:42
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 下午1:12:42
* @Version:V6.0
*/
public class UploadInterceptor implements Interceptor{
/**
* 请求拦截
* @Discription:扩展说明
* @Author: feizi
* @Date: 2015年4月23日 下午1:13:56
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 下午1:13:56
* @see com.jfinal.aop.Interceptor#intercept(com.jfinal.core.ActionInvocation)
*/
@Override
public void intercept(ActionInvocation ai) {
System.out.println("===============Before invoking " + ai.getActionKey());
ai.invoke();
System.out.println("===============After invoking " + ai.getActionKey());
}
}
5、Upload类
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.model;
import com.jfinal.plugin.activerecord.Model;
/**
* Upload
* @Author: feizi
* @Date: 2015年4月23日 下午1:11:04
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 下午1:11:04
* @Version:V6.0
*/
public class Upload extends Model<Upload>{
private static final long serialVersionUID = -7829607291906618841L;
public static final Upload dao = new Upload();
}
6、UploadValidator类
/**
* 文件说明
* @Description:扩展说明
* @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
* @Version: V6.0
*/
package com.demo.validator;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
/**
* @Author: feizi
* @Date: 2015年4月23日 下午1:15:38
* @ModifyUser: feizi
* @ModifyDate: 2015年4月23日 下午1:15:38
* @Version:V6.0
*/
public class UploadValidator extends Validator{
/**
* 验证
* @Discription:扩展说明
* @Author: feizi
* @Date: 2015年4月23日 下午1:16:02
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 下午1:16:02
* @see com.jfinal.validate.Validator#validate(com.jfinal.core.Controller)
*/
@Override
protected void validate(Controller c) {
}
/**
* 处理错误
* @Discription:扩展说明
* @Author: feizi
* @Date: 2015年4月23日 下午1:16:02
* @ModifyUser:feizi
* @ModifyDate: 2015年4月23日 下午1:16:02
* @see com.jfinal.validate.Validator#handleError(com.jfinal.core.Controller)
*/
@Override
protected void handleError(Controller c) {
}
}
7、index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index.jsp</title>
<script src="uploadify/jquery.min.js" type="text/javascript"></script>
<script src="uploadify/jquery.uploadify.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="uploadify/uploadify.css">
</head>
<body>
<form action="/upload/uploads" method="post" enctype="multipart/form-data">
<input type="file" name="file_upload" id="file_upload"/>
<input type="submit" name="uploadbutton" value="上传"/>
</form>
<!-- 文件上传成功之后,文件的地址显示在这里 -->
<ul id="url"></ul>
<script type="text/javascript">
$(function(){
$("#file_upload").uploadify({
//校验数据
‘swf‘ : ‘uploadify/uploadify.swf‘, //指定上传控件的主体文件,默认‘uploader.swf’
‘uploader‘ : ‘/upload/uploads‘, //指定服务器端上传处理文件,默认‘upload.php’
‘auto‘ : true, //自动上传
‘buttonImage‘ : ‘uploadify/uploadify-browse.png‘, //浏览按钮背景图片
‘multi‘ : false, //单文件上传
‘fileTypeExts‘ : ‘*.gif; *.jpg; *.png; *.flv; *.avi; *.mp4; *.mp3‘, //允许上传的文件后缀
‘fileSizeLimit‘ : ‘300MB‘, //上传文件的大小限制,单位为B, KB, MB, 或 GB
‘successTimeout‘ : 30, //成功等待时间
‘onUploadSuccess‘ : function(file, data, response) {
//每成功完成一次文件上传时触发一次
var image=eval("["+data+‘]‘)[0];
//alert(‘===file:‘+file);
//alert(‘===data:‘+data);//json格式
//alert(‘===response:‘+response);//true
//alert(‘===image:‘+image);
//alert(‘===image.fileName:‘+image.fileName);
$(‘#url‘).append("<li><img width=80 src="+image.fileName+" </li>");
/* var image=eval(data);
alert(image[0]["big"]); */
},
‘onUploadError‘ : function(file, data, response) {
//当上传返回错误时触发
$(‘#url‘).append("<li>" + data + "</li>");
}
});
});
</script>
</body>
</html>
最终实现的效果:
源码已打包上传至csdn:
http://download.csdn.net/detail/hu1991die/8624263
有需要可以看看。。。共同学习,共同成长!!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。