最近使用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.simple.*" %>
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
JSONObject obj = new JSONObject();
118
obj.put("error", 1);
119
obj.put("message", message);
120
return obj.toJSONString();
121
}
122
%>