今天开始用kindeditor,主要是因为kindeditor界面干净,API齐全。但上传图片的时候遇到各种问题,我就来个各种解决。kindeditor中jsp的demo是用纯jsp实现,如果你的项目里用到其它的例如struts2,把示例直接放入项目则会出现很多问题,我用的是struts2,下面是我在实现过程中遇到的问题。

1、页面提示“上传目录不存在”,这个肯定是没有在根目录下建立attached的文件夹。

2、后台提示Unabletofind 'struts.multipart.saveDir' propertysetting,那肯定是struts没有设置struts.multipart.saveDir,在配置文件里设置即可,如下:

<constant name="struts.multipart.saveDir" value="\tmp"></constant>

3、以上两个问题解决了以后,出现的情况如下,点击上传以后,弹出上传错误的弹出层,里面是空内容,这时候就是解决struts2和kindeditor4.0+的上传图片的重点了。

  1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  2 <%@ page import="java.util.*,java.io.*" %>  3 <%@ page import="java.text.SimpleDateFormat" %>  4 <%@ page import="org.apache.commons.fileupload.*" %>  5 <%@ page import="org.apache.commons.fileupload.disk.*" %>  6 <%@ page import="org.apache.commons.fileupload.servlet.*" %>  7 <%@ page import="org.json.simple.*" %>  8 <%@ page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper" %>  9 <% 10  11 /** 12  * KindEditor JSP 13  *  14  * struts2上传 15  *  16  */ 17  18 //文件保存目录路径 19 String savePath = pageContext.getServletContext().getRealPath("/") + "attached/"; 20 //文件保存目录URL 21 String saveUrl  = request.getContextPath() + "/attached/"; 22  23 //定义允许上传的文件扩展名 24 HashMap<String, String> extMap = new HashMap<String, String>(); 25 extMap.put("image", "gif,jpg,jpeg,png,bmp"); 26 extMap.put("flash", "swf,flv"); 27 extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb"); 28 extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2"); 29  30 //最大文件大小 31 long maxSize = 204800000; 32  33 response.setContentType("text/html; charset=UTF-8"); 34  35 if(!ServletFileUpload.isMultipartContent(request)){ 36     out.println(getError("请选择文件。")); 37     return; 38 } 39 //检查目录 40 File uploadDir = new File(savePath); 41 if(!uploadDir.isDirectory()){ 42     out.println(getError("上传目录不存在。")); 43     return; 44 } 45 //检查目录写权限 46 if(!uploadDir.canWrite()){ 47     out.println(getError("上传目录没有写权限。")); 48     return; 49 } 50  51 String dirName = request.getParameter("dir"); 52 if (dirName == null) { 53     dirName = "image"; 54 } 55 if(!extMap.containsKey(dirName)){ 56     out.println(getError("目录名不正确。")); 57     return; 58 } 59 //创建文件夹 60 savePath += dirName + "/"; 61 saveUrl += dirName + "/"; 62 File saveDirFile = new File(savePath); 63 if (!saveDirFile.exists()) { 64     saveDirFile.mkdirs(); 65 } 66 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 67 String ymd = sdf.format(new Date()); 68 savePath += ymd + "/"; 69 saveUrl += ymd + "/"; 70 File dirFile = new File(savePath); 71 if (!dirFile.exists()) { 72     dirFile.mkdirs(); 73 } 74  75 if (!dirFile.isDirectory()) { 76     out.println(getError("上传目录不存在 。")); 77     return; 78 } 79 //检查目录写入权限 80 if (!dirFile.canWrite()) { 81     out.println(getError("上传目录没有写入权限。")); 82     return; 83 } 84  85 //Struts2 请求 包装过滤器 86 MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request; 87 //获得上传的文件名 88 String fileName = wrapper.getFileNames("imgFile")[0]; 89 //获得文件过滤器 90 File file = wrapper.getFiles("imgFile")[0]; 91  92 //检查扩展名 93 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); 94 if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){ 95     out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。")); 96     return; 97 } 98 //检查文件大小 99 if (file.length() > maxSize) {100         out.println(getError("上传文件大小超过限制。"));101         return;102 } 103 104 //重构上传图片的名称 105 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");106 String newImgName = df.format(new Date()) + "_"107 + new Random().nextInt(1000) + "." + fileExt;108 byte[] buffer = new byte[1024];109 //获取文件输出流110 FileOutputStream fos = new FileOutputStream(savePath +"/" + newImgName);111 //获取内存中当前文件输入流112 InputStream in = new FileInputStream(file);113 try {114 int num = 0;115 while ((num = in.read(buffer)) > 0) {116                 fos.write(buffer, 0, num);117         }118 } catch (Exception e) {119         e.printStackTrace(System.err);120 } finally {121         in.close();122         fos.close();123 }124 125 //发送给 KE 126 JSONObject obj = new JSONObject();127 obj.put("error", 0);128 obj.put("url", saveUrl +"/" + newImgName);129 out.println(obj.toJSONString());130 %>131 132 <%!133 private String getError(String message) {134     JSONObject obj = new JSONObject();135     obj.put("error", 1);136     obj.put("message", message);137     return obj.toJSONString();138 }139 %>

其实第三个问题在网上查找的,地址:http://www.linuxso.com/linuxbiancheng/11400.html#goodfb1322

转载于:https://www.cnblogs.com/zhangyanhu/archive/2012/03/07/2384482.html

struts2+kindeditor4.0.5的上传图片的实现相关推荐

  1. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

  2. Typora1.0.2 + SMMS上传图片

    Typora 是一个很好用的编辑器(现在开始收费),下面简短的介绍如何配置Typora + smms自动上传图片.网上很多教程,但是大概率会遇到Error: Can't find smms confi ...

  3. 在ASP.NET中上传图片并生成缩略图

    在ASP.NET中上传图片并生成缩略图,可以参照下列代码: private void btnUploadPicture_Click(object sender, System.EventArgs e) ...

  4. struts2.1.8,hibernate3.3.2,spring2.5 整合需要哪些jar包

    struts2  commons-logging-1.0.4.jar -------主要用于日志处理  freemarker-2.3.8.jar ------- 模板相关操作需要包  ognl-2.6 ...

  5. asp.net中上传图片并生成小图片,自动添加水印的代码 .

    asp.net中上传图片并生成小图片,自动添加水印的代码 分类: .Net(C#) 2010-03-22 15:28 242人阅读 评论(0) 收藏 举报 /// 上传图片生成缩略图及水印 (来自:h ...

  6. 编辑器FreeTextBox升级至3.0

    编辑器FreeTextBox升级至3.0. 现在上传图片时,可以创建文件夹.

  7. php上传图片完成后的截图,php实现粘贴截图并完成上传功能

    今天发现segmentfault的评论留言里面可以粘贴上传图片,于是研究了下怎么实现的! 原理很简单其实就是监控粘贴事件,然后检测是否粘贴的东西里面有图片,有的话直接触发ajax上传 代码可以直接运行 ...

  8. Struts2的ResultType和Action处理链

    Struts2的ResultType和Action处理链 Struts2的结果类型 在struts-default.xml中定义了Struts2内置的所有可用的<result-type/> ...

  9. Struts2和Spring和Hibernate应用实例

    Struts2.Spring和Hibernate应用实例 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点 ...

最新文章

  1. QA:智能布线系统二十问
  2. PHP中的dirname
  3. 类中的构造方法实例化的时候自动执行
  4. USACO training 2.4.5 Fractions to Decimals题解
  5. 扇贝有道180917每日一句
  6. php_eol为什么没有换行,PHP PHP_EOL 换行符
  7. Windows安装JDK
  8. Q Learning学习笔记
  9. win10到优麒麟到深度系统
  10. python编写计算方差的函数_基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解...
  11. Eclipse如何调试代码
  12. 腾讯云服务器地域节点IP速度测试表
  13. virt-manager设置主机和虚拟机之间文件共享
  14. 高等数学:第五章 定积分(2) 定积分的性质、中值定理
  15. 国产数据库普及风暴有奖征文获奖名单揭晓
  16. 工程制图——尺寸标注
  17. 地图上雷达探测到的物体实时映射到雷达图上
  18. Dao,Service,Controller层作用
  19. 英文参考文献按照首字母排序使用matlab实现
  20. VUE 百度离线地图的下载与使用

热门文章

  1. 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...
  2. 一篇文章带你详解 TCP/IP 协议(上)
  3. 【REST】REST和JAX-RS相关知识介绍
  4. 数据中心空调系统中的冷却塔应用手册
  5. 电气接线+线号管正确方向=电工接线好习惯!你有吗?
  6. 专业人士提升数据中心职业生涯的6件事
  7. windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
  8. python数据分析pandas_Python数据分析之 pandas汇总和计算描述统计
  9. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链标准体系框架
  10. IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略