kingeditor(jsp)与SSH三大框架整合上传图片出错问题解决方案
最近使用kindeditor4.1编辑文章,发现上传图片发生错误,而上传flash文件以及媒体文件可以上传成功。我也不得其解,通过查找大量资料得知,是struts框架对request对象做了封装,upload_json.jsp文件可以不用任何修改,修改web.xml文件中有关action路径就可以了,如下: <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
就可以正常得到request中的内容.
或者你理解得够透彻时间充裕且感兴趣的话,可以重写下面的upload_json.jsp文件,顺便给我发一份啊,哈哈!
upload_json.jsp
001
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
002
<%@ page import="java.util.*,java.io.*" %>
003
<%@ page import="java.text.SimpleDateFormat" %>
004
<%@ page import="org.apache.commons.fileupload.*" %>
005
<%@ page import="org.apache.commons.fileupload.disk.*" %>
006
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
007
<%@ page import="org.json.易做图.*" %>
008
<%
009
010
/**
011
* KindEditor JSP
012
*
013
* 本JSP程序是演示程序,建议不要直接在实际项目中使用。
014
* 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
015
*
016
*/
017
018
//文件保存目录路径
019
String savePath = pageContext.getServletContext().getRealPath("/") + "attached/";
020
021
//文件保存目录URL
022
String saveUrl = request.getContextPath() + "/attached/";
023
024
//定义允许上传的文件扩展名
025
HashMap<String, String> extMap = new HashMap<String, String>();
026
extMap.put("image", "gif,jpg,jpeg,png,bmp");
027
extMap.put("flash", "swf,flv");
028
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
029
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
030
031
//最大文件大小
032
long maxSize = 2000000000;
033
034
response.setContentType("text/html; charset=UTF-8");
035
036
if(!ServletFileUpload.isMultipartContent(request)){
037
out.println(getError("请选择文件。"));
038
return;
039
}
040
//检查目录
041
File uploadDir = new File(savePath);
042
if(!uploadDir.isDirectory()){
043
out.println(getError("上传目录不存在。"));
044
return;
045
}
046
//检查目录写权限
047
if(!uploadDir.canWrite()){
048
out.println(getError("上传目录没有写权限。"));
049
return;
050
}
051
052
String dirName = request.getParameter("dir");
053
if (dirName == null) {
054
dirName = "image";
055
}
056
if(!extMap.containsKey(dirName)){
057
out.println(getError("目录名不正确。"));
058
return;
059
}
060
//创建文件夹
061
savePath += dirName + "/";
062
saveUrl += dirName + "/";
063
File saveDirFile = new File(savePath);
064
if (!saveDirFile.exists()) {
065
saveDirFile.mkdirs();
066
}
067
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
068
String ymd = sdf.format(new Date());
069
savePath += ymd + "/";
070
saveUrl += ymd + "/";
071
File dirFile = new File(savePath);
072
if (!dirFile.exists()) {
073
dirFile.mkdirs();
074
}
075
076
FileItemFactory factory = new DiskFileItemFactory();
077
ServletFileUpload upload = new ServletFileUpload(factory);
078
upload.setHeaderEncoding("UTF-8");
079
List items = upload.parseRequest(request);
080
Iterator itr = items.iterator();
081
while (itr.hasNext()) {
082
FileItem item = (FileItem) itr.next();
083
String fileName = item.getName();
084
long fileSize = item.getSize();
085
if (!item.isFormField()) {
086
//检查文件大小
087
if(item.getSize() > maxSize){
088
out.println(getError("上传文件大小超过限制。"));
089
return;
090
}
091
//检查扩展名
092
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
093
if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
094
out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
095
return;
096
}
097
098
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
099
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
100
try{
101
File uploadedFile = new File(savePath, newFileName);
102
item.write(uploadedFile);
103
}catch(Exception e){
104
out.println(getError("上传文件失败。"));
105
return;
106
}
107
108
JSONObject obj = new JSONObject();
109
obj.put("error", 0);
110
obj.put("url", saveUrl + newFileName);
111
out.println(obj.toJSONString());
112
}
113
}
114
%>
115
<%!
116
private String getError(String message) {
117补充:Web开发 , Jsp ,