精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Struts2使用Kindeditor4.0.3在線編輯器--上傳圖片、視頻、FLASH、附件

Kindeditor一直比較喜歡,國產免費開源,界面也很清爽,主要是功能很強大,以后工作了一定要贊助下!

Kindeditor支持java,提供的示例程序由jsp充當文件管理和上傳,以前使用好好的,但這次使用的struts2,而struts過濾器包裝了request,對就因為這點,

kindeditor不能使用了。在kindeditor論壇上有位前輩的描述比較清楚:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
kindeditor 在java環境中用到了 commons-fileupload-1.2.1.jar 組件。
在Common- FileUpload中,它把從客戶端提交過來的表單封裝成一個個FileItem對象,這也是它實現文件上傳功能 的核心類。另一個很重要的類就是FileUploadBase,他的功能就是解析請求(request),如進行上傳文 件大小驗證,請求類型驗證(文件上傳的enctype要設置成multipart/form-data)等。我們經常用到它 的子類ServletFileUpload。在FileUploadBase解析 request的過程中會將文件保存到內存,如果文件大 小大于我們設置的緩存的大小,它將把文件的其他內容保存到一個臨時目錄,當我們對FileItem 對象實 現正真上傳時會從內存區或臨時目錄將文件保存到正真的上傳目錄。
在kindeditor上傳圖片調試過程中,發現
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
發現代碼4,items為空,取不到需要上傳的文件,故沒有執行while循環,也就沒有返回值,kindeditor報服務器錯誤。
為什么取不到值,是因為:struts2過濾訪問的jsp時,會改變reqeust的類型,由HttpServletRequest變成MultiPartRequestWrapper,所以parseRequest就返回了null。
既然在過濾的時候改變reqeust的類型,那就可以修改web.xml不過濾jsp。但是如果在jsp中用到了struts2的標簽就會報500的錯誤,這個方案在我的應用中不適用。
最終解決方案是,寫個Servlet來代替upload_json.jsp的功能。upload_json.jsp里面的代碼大部分都可以復制到Servlet中, upload_json.jsp中的out.prinln返回值用 resp.getWriter().println()代替就行。
jsp調用是,修改imageUploadJson的路徑即可(用的版本是kindeditor-3.5.5,因為KindEditor 4.0 beta與我用到的mootools有沖突,已經提交bug)。
KE.show({
id : 'noticeContent',
imageUploadJson : '<ui:webroot/>/fileUploadServlet?uploadTool=kindeditor',
fileManagerJson : '<ui:webroot/>/js/kindeditor3.5.5/file_manager_json.jsp',
allowFileManager : true
});

嘗試了他的方法,但我的項目一直無法訪問到servlet,直接給struts2攔截了,也不是servlet在web.xml問題,懷疑是struts2版本原因吧!網上有說話把struts的url-pattern改為*.action,不知道他的struts什么版本,我的直接啟動報異常,我把url-pattern改為/*.action雖然不報異常了,但很多404了。在網上又看見了kindeditor插件項目KEPlugin,使用action上傳解決了struts2中kindeditor問題,但對方使用的kindeditor3.6,對視頻和flash支持不是很友好。參考網上思路決定自己把kindeditor4.0+版本與struts2兼容問題解決,使kindeditor支持上傳圖片、視頻、FLASH、附件,而且越簡單越好。

通過調試jsp頁面可以知道struts2把request到底封裝成什么了!

于是查看struts2文檔,這個類到底是什么!

主要到了其中的一個方法:

貌似可以得到File對象,繼續調試:

終于發現我上傳的文件了,通過這個File我可以直接處理上傳的文件了,接下來問題就明了了!

主要那個maxSize是我通過在struts.xml中配置的,默認是十幾M吧!

上代碼:

struts.xml配置struts所有文件上傳的大小,如果上傳視頻和附件最好配置大點:

kindeditor4.0.3修改之后的文件(upload_json.jsp):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper" %>
<%
//文件保存目錄路徑
//D:\Tomcat6.0\webapps\zswz\attached/
String savePath = request.getSession().getServletContext().getRealPath("/") + "attached/";
//文件保存目錄URL /zswz/attached/
String saveUrl = request.getContextPath() + "/attached/";
//定義允許上傳的文件擴展名
//定義允許上傳的文件擴展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
extMap.put("flash", "swf,flv");
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
//允許最大上傳文件大小 struts.xml struts.multipart.maxSize=3G
long maxSize = 3000000000l;
response.setContentType("text/html; charset=UTF-8");
if(!ServletFileUpload.isMultipartContent(request)){
out.println(getError("請選擇文件。"));
return;
}
//檢查目錄
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
out.println(getError("上傳目錄不存在。"));
return;
}
//檢查目錄寫權限
if(!uploadDir.canWrite()){
out.println(getError("上傳目錄沒有寫權限。"));
return;
}
String dirName = request.getParameter("dir");//image
if (dirName == null) {
dirName = "image";
}
if(!extMap.containsKey(dirName)){
out.println(getError("目錄名不正確。"));
return;
}
//創建文件夾
savePath += dirName + "/";//D:\Tomcat6.0\webapps\zswz\attached/image/
saveUrl += dirName + "/";///zswz/attached/image/
File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";//D:\Tomcat6.0\webapps\zswz\attached/image/20111129/
saveUrl += ymd + "/";///zswz/attached/image/20111129/
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
if (!dirFile.isDirectory()) {
out.println(getError("上傳目錄不存在 。"));
return;
}
//檢查目錄寫入權限
if (!dirFile.canWrite()) {
out.println(getError("上傳目錄沒有寫入權限。"));
return;
}
//Struts2 請求 包裝過濾器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
//獲得上傳的文件名
String fileName = wrapper.getFileNames("imgFile")[0];//imgFile,imgFile,imgFile
//獲得文件過濾器
File file = wrapper.getFiles("imgFile")[0];
//檢查擴展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
out.println(getError("上傳文件擴展名是不允許的擴展名。\n只允許" + extMap.get(dirName) + "格式。"));
return;
}
//檢查文件大小
if (file.length() > maxSize) {
out.println(getError("上傳文件大小超過限制。"));
return;
}
//重構上傳圖片的名稱
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newImgName = df.format(new Date()) + "_"
+ new Random().nextInt(1000) + "." + fileExt;
byte[] buffer = new byte[1024];
//獲取文件輸出流
FileOutputStream fos = new FileOutputStream(savePath +"/" + newImgName);
//獲取內存中當前文件輸入流
InputStream in = new FileInputStream(file);
try {
int num = 0;
while ((num = in.read(buffer)) > 0) {
fos.write(buffer, 0, num);
}
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
in.close();
fos.close();
}
//發送給 KE
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl +"/" + newImgName);
///zswz/attached/image/20111129/ image 20111129195421_593.jpg
out.println(obj.toJSONString());
%>
<%!
private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}
%>

效果圖:

個人環境:win7+tomcat6+myelipse9.0+struts2.2.3+spring3.0+hibernate3.6+kindeditor4.0.3

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
KindEditor上傳圖片問題
struts2.2.1 文件上傳
struts2.0國際化,JSP,action,參數國際化
struts2學習筆記(9)——自定義攔截器
關于struts2中namespace和s:form action和form action 路徑問題
關于Action接受參數的四種方法
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 富平县| 尤溪县| 渝北区| 大竹县| 商南县| 当雄县| 吐鲁番市| 新乡市| 建阳市| 于都县| 北川| 中阳县| 塔河县| 昭平县| 新乡县| 嘉鱼县| 波密县| 德钦县| 互助| 资源县| 读书| 木里| 汝阳县| 林口县| 扎鲁特旗| 余干县| 巨鹿县| 延庆县| 夹江县| 财经| 宁南县| 河间市| 临城县| 崇信县| 元江| 如东县| 阳城县| 南平市| 蒙阴县| 周宁县| 康平县|