struts2+kindeditor4.0.5的上传图片的实现
今天开始用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的上传图片的实现相关推荐
- SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置
一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...
- Typora1.0.2 + SMMS上传图片
Typora 是一个很好用的编辑器(现在开始收费),下面简短的介绍如何配置Typora + smms自动上传图片.网上很多教程,但是大概率会遇到Error: Can't find smms confi ...
- 在ASP.NET中上传图片并生成缩略图
在ASP.NET中上传图片并生成缩略图,可以参照下列代码: private void btnUploadPicture_Click(object sender, System.EventArgs e) ...
- struts2.1.8,hibernate3.3.2,spring2.5 整合需要哪些jar包
struts2 commons-logging-1.0.4.jar -------主要用于日志处理 freemarker-2.3.8.jar ------- 模板相关操作需要包 ognl-2.6 ...
- asp.net中上传图片并生成小图片,自动添加水印的代码 .
asp.net中上传图片并生成小图片,自动添加水印的代码 分类: .Net(C#) 2010-03-22 15:28 242人阅读 评论(0) 收藏 举报 /// 上传图片生成缩略图及水印 (来自:h ...
- 编辑器FreeTextBox升级至3.0
编辑器FreeTextBox升级至3.0. 现在上传图片时,可以创建文件夹.
- php上传图片完成后的截图,php实现粘贴截图并完成上传功能
今天发现segmentfault的评论留言里面可以粘贴上传图片,于是研究了下怎么实现的! 原理很简单其实就是监控粘贴事件,然后检测是否粘贴的东西里面有图片,有的话直接触发ajax上传 代码可以直接运行 ...
- Struts2的ResultType和Action处理链
Struts2的ResultType和Action处理链 Struts2的结果类型 在struts-default.xml中定义了Struts2内置的所有可用的<result-type/> ...
- Struts2和Spring和Hibernate应用实例
Struts2.Spring和Hibernate应用实例 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点 ...
最新文章
- QA:智能布线系统二十问
- PHP中的dirname
- 类中的构造方法实例化的时候自动执行
- USACO training 2.4.5 Fractions to Decimals题解
- 扇贝有道180917每日一句
- php_eol为什么没有换行,PHP PHP_EOL 换行符
- Windows安装JDK
- Q Learning学习笔记
- win10到优麒麟到深度系统
- python编写计算方差的函数_基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解...
- Eclipse如何调试代码
- 腾讯云服务器地域节点IP速度测试表
- virt-manager设置主机和虚拟机之间文件共享
- 高等数学:第五章 定积分(2) 定积分的性质、中值定理
- 国产数据库普及风暴有奖征文获奖名单揭晓
- 工程制图——尺寸标注
- 地图上雷达探测到的物体实时映射到雷达图上
- Dao,Service,Controller层作用
- 英文参考文献按照首字母排序使用matlab实现
- VUE 百度离线地图的下载与使用
热门文章
- 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...
- 一篇文章带你详解 TCP/IP 协议(上)
- 【REST】REST和JAX-RS相关知识介绍
- 数据中心空调系统中的冷却塔应用手册
- 电气接线+线号管正确方向=电工接线好习惯!你有吗?
- 专业人士提升数据中心职业生涯的6件事
- windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
- python数据分析pandas_Python数据分析之 pandas汇总和计算描述统计
- BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链标准体系框架
- IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略