Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
2013-06-14 10:52
537 查看
Kindeditor一直比较喜欢,国产免费开源,界面也很清爽,主要是功能很强大,以后工作了一定要赞助下!
Kindeditor支持java,提供的示例程序由jsp充当文件管理和上传,以前使用好好的,但这次使用的struts2,而struts过滤器包装了request,对就因为这点,
kindeditor不能使用了。在kindeditor论坛上有位前辈的描述比较清楚:
?
尝试了他的方法,但我的项目一直无法访问到servlet,直接给struts2拦截了,也不是servlet在web.xml问题,怀疑是struts2版本原因吧!网上有说话把struts的url-pattern改为*.action,不知道他的struts什么版本,我的直接启动报异常,我把url-pattern改为/*.action虽然不报异常了,但很多404了。在网上又看见了kindeditor插件项目KEPlugin,使用action上传解决了struts2中kindeditor问题,但对方使用的kindeditor3.6,对视频和flash支持不是很友好。参考网上思路决定自己把kindeditor4.0+版本与struts2兼容问题解决,使kindeditor支持上传图片、视频、FLASH、附件,而且越简单越好。
通过调试jsp页面可以知道struts2把request到底封装成什么了!
于是查看struts2文档,这个类到底是什么!
主要到了其中的一个方法:
貌似可以得到File对象,继续调试:
终于发现我上传的文件了,通过这个File我可以直接处理上传的文件了,接下来问题就明了了!
主要那个maxSize是我通过在struts.xml中配置的,默认是十几M吧!
上代码:
struts.xml配置struts所有文件上传的大小,如果上传视频和附件最好配置大点:
kindeditor4.0.3修改之后的文件(upload_json.jsp):
?
----------我修改成了struts2的action来使用
效果图:
个人环境:win7+tomcat6+myelipse9.0+struts2.2.3+spring3.0+hibernate3.6+kindeditor4.0.3
转自:http://www.cnblogs.com/syxchina/archive/2011/11/29/2268192.html
Kindeditor支持java,提供的示例程序由jsp充当文件管理和上传,以前使用好好的,但这次使用的struts2,而struts过滤器包装了request,对就因为这点,
kindeditor不能使用了。在kindeditor论坛上有位前辈的描述比较清楚:
?
通过调试jsp页面可以知道struts2把request到底封装成什么了!
于是查看struts2文档,这个类到底是什么!
主要到了其中的一个方法:
貌似可以得到File对象,继续调试:
终于发现我上传的文件了,通过这个File我可以直接处理上传的文件了,接下来问题就明了了!
主要那个maxSize是我通过在struts.xml中配置的,默认是十几M吧!
上代码:
struts.xml配置struts所有文件上传的大小,如果上传视频和附件最好配置大点:
kindeditor4.0.3修改之后的文件(upload_json.jsp):
?
package com.sxwl.web.action.upload; import com.sxwl.util.Time; import com.sxwl.web.action.base.BaseAction; import java.io.*; import java.util.Arrays; import java.util.HashMap; import java.util.Random; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; import org.json.simple.JSONObject; /** * * @version : 1.0 * * @author : 赵洪禹 <a href="zhao_hong_yu@sina.cn">发送邮件</a> * * @since : 1.0 创建时间: 2013年6月9日 13:00:43 * */ public class UploadAction extends BaseAction { private static final long serialVersionUID = 1L; // 允许最大上传文件大小 struts.xml struts.multipart.maxSize=3G long maxSize = 3000000000l; @SuppressWarnings("unchecked") public String upload() throws IOException { PrintWriter out = response.getWriter(); // 文件保存目录路径 // D:\Tomcat6.0\webapps\images\news/ String savePath = request.getSession().getServletContext().getRealPath( "/") + "images/news/"; // System.out.println("文件保存目录路径:" + savePath); // 文件保存目录URL /images/news/ String saveUrl = request.getContextPath() + "/images/news/"; // System.out.println("文件保存目录URL:" + saveUrl); // 定义允许上传的文件扩展名 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"); response.setContentType("text/html; charset=UTF-8"); if (!ServletFileUpload.isMultipartContent(request)) { out.println(getError("请选择文件。")); return null; } // 检查目录 File uploadDir = new File(savePath); if (!uploadDir.isDirectory()) { out.println(getError("上传目录不存在。")); return null; } // 检查目录写权限 if (!uploadDir.canWrite()) { out.println(getError("上传目录没有写权限。")); return null; } String dirName = request.getParameter("dir");// image if (dirName == null) { dirName = "image"; } if (!extMap.containsKey(dirName)) { out.println(getError("目录名不正确。")); return null; } // 创建文件夹 savePath += dirName + "/";// D:\Tomcat6.0\webapps\images\news/image/ saveUrl += dirName + "/";// /images/news/image/ File saveDirFile = new File(savePath); if (!saveDirFile.exists()) { saveDirFile.mkdirs(); } String ymd = Time.getTime("yyyyMMdd"); savePath += ymd + "/";// D:\Tomcat6.0\webapps\images\news/image/20130614/ saveUrl += ymd + "/";// /images/news/image/20130614/ File dirFile = new File(savePath); if (!dirFile.exists()) { dirFile.mkdirs(); } if (!dirFile.isDirectory()) { out.println(getError("上传目录不存在 。")); return null; } // 检查目录写入权限 if (!dirFile.canWrite()) { out.println(getError("上传目录没有写入权限。")); return null; } // Struts2 请求 包装过滤器 MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request; // 获得上传的文件名 String fileName = wrapper.getFileNames("imgFile")[0];// imgFile,imgFile,imgFile // 获得文件过滤器 File file = wrapper.getFiles("imgFile")[0]; // 检查扩展名 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 null; } // 检查文件大小 if (file.length() > maxSize) { out.println(getError("上传文件大小超过限制。")); return null; } // 重构上传图片的名称 String newImgName = Time.getTime("yyyyMMddHHmmss") + "_" + new Random().nextInt(1000) + "." + fileExt; // System.out.println("上传图片名字:"+newImgName); byte[] buffer = new byte[1024]; // 获取文件输出流 FileOutputStream fos = new FileOutputStream(savePath + "/" + newImgName); // 获取内存中当前文件输入流 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); out.println(getError("上传过程出现错误")); return null; } finally { in.close(); fos.close(); } // 发送给 KE JSONObject obj = new JSONObject(); obj.put("error", 0); obj.put("url", saveUrl + "/" + newImgName); // /images/news/image/20130614/20130614195421_593.jpg out.println(obj.toJSONString()); return null; } /** * 使用I/O流输出 json格式的数据 * * @param response * @param err * @param newFileName * @throws IOException */ public void printInfo(HttpServletResponse response, String err, String newFileName) throws IOException { response.setContentType("text/html;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); out .println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}"); out.flush(); out.close(); } @SuppressWarnings("unchecked") private String getError(String message) { JSONObject obj = new JSONObject(); obj.put("error", 1); obj.put("message", message); return obj.toJSONString(); } }
效果图:
个人环境:win7+tomcat6+myelipse9.0+struts2.2.3+spring3.0+hibernate3.6+kindeditor4.0.3
转自:http://www.cnblogs.com/syxchina/archive/2011/11/29/2268192.html
相关文章推荐
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片失败 parserequest为null
- KindEditor + Jsp 使用总结之KindEditor4.1.10编辑器图片上传(2)
- 使用Spring MVC对KindEditor进行图片/Flash上传
- asp.net微信开发第十篇----使用百度编辑器编辑图文消息,上传图片、微信视频
- 配合七牛云简易使用kindeditor编辑器的图片上传功能
- 如何用fckeditor编辑器上传图片、flash、视频到moss的图片库中
- struts2中使用kindeditor上传图片(包括jmagic压缩图片)
- struts2中使用kindeditor上传图片(包括jmagic压缩图片)
- 关于kindeditor富文本编辑的上传图片、音频、和视频的使用
- 使用Kindeditor的多文件(图片)上传时出现上传失败的解决办法/使用Flash上传多文件(图片)上传时上传失败的解决办法
- 使用kindeditor来替换ecshop的fckeditor编辑器,让ecshop可以批量上传图片
- 使用 kindeditor 编辑器无法上传图片
- DEDEcms图片附件上传到又拍云使用云存储
- asp.net mvc5 使用百度ueditor 本编辑器完整示例(下)配置上传播放视频
- Markdown编辑器editor.md的使用---markdown上传图片