SSH jsp+kindeditor 报错

最近使用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中的内容.

但是,却不能过滤掉.jsp文件,也就是说jsp文件没有通过配置struts.xml的话,不能访问。在这里我根据源文件重写了upload_json.jsp文件,不必修改web.xml配置文件。这里有个缺陷,flash以及media类型不能上传。

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
133
134
135
136
137
138
139
<%@ 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" %>
<%
 
/**
  * KindEditor JSP
  *
  * 本JSP程序是演示程序,建议不要直接在实际项目中使用。
  * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
  *
  */
 
//文件保存目录路径
String savePath = pageContext.getServletContext().getRealPath( "/" ) + "attached/" ;
 
//文件保存目录URL
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" );
 
//最大文件大小
long maxSize = 300000000 ;
 
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" );
if (dirName == null ) {
     dirName = "image" ;
}
if (!extMap.containsKey(dirName)){
     out.println(getError( "目录名不正确。" ));
     return ;
}
//创建文件夹
savePath += dirName + "/" ;
saveUrl += dirName + "/" ;
File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
     saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd" );
String ymd = sdf.format( new Date());
savePath += ymd + "/" ;
saveUrl += ymd + "/" ;
File dirFile = new File(savePath);
if (!dirFile.exists()) {
     dirFile.mkdirs();
}
 
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
 
//获得上传 的文件名
String fileName =  wrapper.getFileNames( "imgFile" )[ 0 ];
 
//获得文件过滤器
File file = wrapper.getFiles( "imgFile" )[ 0 ];
 
//检查文件大小
if (file.length() > maxSize){
     out.println(getError( "上传文件大小超过限制。" ));
     return ;
         }
         
//检查扩展名
         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 ;
         }
//重构上传文件名
         SimpleDateFormat df = new SimpleDateFormat( "yyyyMMddHHmmss" );
         String newFileName = df.format( new Date()) + "_" + new Random().nextInt( 1000 ) + "." + fileExt;
     
         byte [] buffer = new byte [ 1024 ];
 
     //获取文件输出流
     FileOutputStream fos = new FileOutputStream(savePath + newFileName);
 
     //获取内存中当前文件输入流
     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 + newFileName);
         out.println(obj.toJSONString());
     
 
%>
<%!
private String getError(String message) {
     JSONObject obj = new JSONObject();
     obj.put( "error" , 1 );
     obj.put( "message" , message);
     return obj.toJSONString();
}
%>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值