Jfinal框架學習系列之圖片上傳
阿新 • • 發佈:2019-02-11
昨天學習了一下在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>
最終實現的效果:
有需要可以看看。。。共同學習,共同成長!!