Kindeditor(jsp)与SSH三大框架整合上传图片出错问 3ff8 题解决方案
2012-07-26 09:11
871 查看
最近使用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
<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
<%@ 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(); } %>
相关文章推荐
- Kindeditor(jsp)与SSH三大框架整合上传图片出错问题解决方案
- SSH整合之后解决Kindeditor图片上传功能失效的方案
- ssh三大框架简单整合,struts2整合JasperReport报表、图表,解决HTML显示图片不出来,PDF中文不显示的问题
- ssh三大框架集成后,jsp中采用forword标签提交时会报错的解决方案
- ssh三大框架集成后,jsp中采用forword标签提交时会报错的解决方案
- Ueditor上传图片,ssh和ssm框架下Ueditor整合
- ssh三大框架集成后,jsp中采用forword标签提交时会报错的解决方案
- KindEditor的上传图片CGI(JSP版)
- SSH三大框架整合配置详细步骤(1)
- SSH三大框架整合配置详细步骤(3)
- 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
- Struts2,Spring,Hibernate三大框架的整合(SSH)
- 三大框架整合ssh(二)------DAO层 源码
- ueditor与ssh整合之上传图片篇
- kindeditor图片上传 jsp版
- nodejs 整合kindEditor实现图片上传
- ssh三大框架整合(1)
- Java三大框架之struts的上传文件出错信息配置(允许上传的类型,上传文件的大小,以及大文件上传说明等等)
- SSH 三大框架整合
- 基于XML配置的SSH三大框架整合