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
-1.2
.
1
.jar 组件。
在Common-
在kindeditor上传图片调试过程中,发现
FileItemFactory
ServletFileUpload
upload.setHeaderEncoding(
"UTF-8"
);
List
Iterator
while
发现代码
4
,items为空,取不到需要上传的文件,故没有执行while循环,也就没有返回值,kindeditor报服务器错误。
为什么取不到值,是因为:struts
2
过滤访问的jsp时,会改变reqeust的类型,由HttpServletRequest变成MultiPartRequestWrapper,所以parseRequest就返回了null。
既然在过滤的时候改变reqeust的类型,那就可以修改web.xml不过滤jsp。但是如果在jsp中用到了struts
2
的标签就会报
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
});
|
尝试了他的方法,但我的项目一直无法访问到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
|
<%@
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%>
<%@
import
=
"java.util.*,java.io.*"
%>
<%@
import
=
"java.text.SimpleDateFormat"
%>
<%@
import
=
"org.apache.commons.fileupload.*"
%>
<%@
import
=
"org.apache.commons.fileupload.disk.*"
%>
<%@
import
=
"org.apache.commons.fileupload.servlet.*"
%>
<%@
import
=
"org.json.simple.*"
%>
<%@
import
=
"org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"
%>
<%
//文件保存目录路径
//D:\Tomcat6.0\webapps\zswz\attached/
String
"/"
) +
"attached/"
;
//文件保存目录URL
String
"/attached/"
;
//定义允许上传的文件扩展名
//定义允许上传的文件扩展名
HashMap<String,
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"
);
//允许最大上传文件大小
long
maxSize = 3000000000l;
response.setContentType(
"text/html; charset=UTF-8"
);
if
(!ServletFileUpload.isMultipartContent(request)){
out.println(getError(
"请选择文件。"
));
return
;
}
//检查目录
File
new
File(savePath);
if
(!uploadDir.isDirectory()){
out.println(getError(
"上传目录不存在。"
));
return
;
}
//检查目录写权限
if
(!uploadDir.canWrite()){
out.println(getError(
"上传目录没有写权限。"
));
return
;
}
String
"dir"
);
//image
if
(dirName ==
null
) {
dirName =
"image"
;
}
if
(!extMap.containsKey(dirName)){
out.println(getError(
"目录名不正确。"
));
return
;
}
//创建文件夹
savePath
"/"
;
//D:\Tomcat6.0\webapps\zswz\attached/image/
saveUrl
"/"
;
///zswz/attached/image/
File
new
File(savePath);
if
(!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat
new
SimpleDateFormat(
"yyyyMMdd"
);
String
new
Date());
savePath
"/"
;
//D:\Tomcat6.0\webapps\zswz\attached/image/20111129/
saveUrl
"/"
;
///zswz/attached/image/20111129/
File
new
File(savePath);
if
(!dirFile.exists()) {
dirFile.mkdirs();
}
if
(!dirFile.isDirectory()) {
out.println(getError(
"上传目录不存在 。"
));
return
;
}
//检查目录写入权限
if
(!dirFile.canWrite()) {
out.println(getError(
"上传目录没有写入权限。"
));
return
;
}
//Struts2
MultiPartRequestWrapper
//获得上传的文件名
String
"imgFile"
)[
0
];
//imgFile,imgFile,imgFile
//获得文件过滤器
File
"imgFile"
)[
0
];
//检查扩展名
String
"."
) +
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
new
SimpleDateFormat(
"yyyyMMddHHmmss"
);
String
new
Date()) +
"_"
+
new
Random().nextInt(
1000
) +
"."
+ fileExt;
byte
[] buffer =
new
byte
[
1024
];
//获取文件输出流
FileOutputStream
new
FileOutputStream(savePath +
"/"
+ newImgName);
//获取内存中当前文件输入流
InputStream
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();
}
//发送给
JSONObject
new
JSONObject();
obj.put(
"error"
,
0
);
obj.put(
"url"
, saveUrl +
"/"
+ newImgName);
///zswz/attached/image/20111129/
out.println(obj.toJSONString());
%>
<%!
private
String getError(String message) {
JSONObject obj =
new
JSONObject();
obj.put(
"error"
,
1
);
obj.put(
"message"
, message);
return
obj.toJSONString();
}
%>
|
效果图:
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。