分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

ckeditor 实现 servlet 图片上传 配置

发布时间:2023-09-06 02:02责任编辑:赖小花关键词:配置

整个源码上传在  http://download.csdn.net/source/3539767

注意有一点小bug【不支持中文图片上传】

web.xml 的相关配置

其中baseDir是文件上传后的目录。

<servlet> ???????<servlet-name>SimpleUploader</servlet-name> ???????<servlet-class>ckeditor.CKEditorUploadServlet</servlet-class> ???????<init-param> ???????????<param-name>baseDir</param-name> ???????????<param-value>/UserFiles/</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>debug</param-name> ???????????<param-value>false</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>enabled</param-name> ???????????<param-value>true</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>AllowedExtensionsFile</param-name> ???????????<param-value></param-value> ???????</init-param> ???????<init-param> ???????????<param-name>DeniedExtensionsFile</param-name> ???????????<param-value> ???????????????html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|ftl ???????????</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>AllowedExtensionsImage</param-name> ???????????<param-value>jpg|gif|jpeg|png|bmp</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>DeniedExtensionsImage</param-name> ???????????<param-value></param-value> ???????</init-param> ???????<init-param> ???????????<param-name>AllowedExtensionsFlash</param-name> ???????????<param-value>swf|fla</param-value> ???????</init-param> ???????<init-param> ???????????<param-name>DeniedExtensionsFlash</param-name> ???????????<param-value></param-value> ???????</init-param> ???????<load-on-startup>0</load-on-startup> ???</servlet> ????<servlet-mapping> ???????<servlet-name>SimpleUploader</servlet-name> ???????<url-pattern>/ckeditor/uploader</url-pattern> ???</servlet-mapping>
View Code

servlet的完整源码

package ckeditor; import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload; public class CKEditorUploadServlet extends HttpServlet { ????private static String baseDir;// CKEditor的根目录 ???private static boolean debug = false;// 是否debug模式 ???private static boolean enabled = false;// 是否开启CKEditor上传 ???private static Hashtable allowedExtensions;// 允许的上传文件扩展名 ???private static Hashtable deniedExtensions;// 阻止的上传文件扩展名 ???private static SimpleDateFormat dirFormatter;// 目录命名格式:yyyyMM ???private static SimpleDateFormat fileFormatter;// 文件命名格式:yyyyMMddHHmmssSSS ????/** ????* Servlet初始化方法 ????*/ ???@SuppressWarnings("unchecked") ???public void init() throws ServletException { ???????// 从web.xml中读取debug模式 ???????debug = (new Boolean(getInitParameter("debug"))).booleanValue(); ???????if (debug) ???????????System.out ???????????????????.println("\r\n---- SimpleUploaderServlet initialization started ----"); ???????// 格式化目录和文件命名方式 ???????dirFormatter = new SimpleDateFormat("yyyyMM"); ???????fileFormatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); ???????// 从web.xml中获取根目录名称 ???????baseDir = getInitParameter("baseDir"); ???????// 从web.xml中获取是否可以进行文件上传 ???????enabled = (new Boolean(getInitParameter("enabled"))).booleanValue(); ???????if (baseDir == null) ???????????baseDir = "/UserFiles/"; ???????String realBaseDir = getServletContext().getRealPath(baseDir); ???????File baseFile = new File(realBaseDir); ???????if (!baseFile.exists()) { ???????????baseFile.mkdirs(); ???????} ???????// 实例化允许的扩展名和阻止的扩展名 ???????allowedExtensions = new Hashtable(3); ???????deniedExtensions = new Hashtable(3); ???????// 从web.xml中读取配置信息 ???????allowedExtensions.put("File", ???????????????stringToArrayList(getInitParameter("AllowedExtensionsFile"))); ???????deniedExtensions.put("File", ???????????????stringToArrayList(getInitParameter("DeniedExtensionsFile"))); ????????allowedExtensions.put("Image", ???????????????stringToArrayList(getInitParameter("AllowedExtensionsImage"))); ???????deniedExtensions.put("Image", ???????????????stringToArrayList(getInitParameter("DeniedExtensionsImage"))); ????????allowedExtensions.put("Flash", ???????????????stringToArrayList(getInitParameter("AllowedExtensionsFlash"))); ???????deniedExtensions.put("Flash", ???????????????stringToArrayList(getInitParameter("DeniedExtensionsFlash"))); ???????if (debug) ???????????System.out ???????????????????.println("---- SimpleUploaderServlet initialization completed ----\r\n"); ???} ????public void doGet(HttpServletRequest request, HttpServletResponse response) ???????????throws ServletException, IOException { ???????doPost(request, response); ???} ????public void doPost(HttpServletRequest request, HttpServletResponse response) ???????????throws ServletException, IOException { ???????if (debug) ???????????System.out.println("--- BEGIN DOPOST ---"); ???????response.setContentType("text/html; charset=UTF-8"); ???????response.setHeader("Cache-Control", "no-cache"); ???????PrintWriter out = response.getWriter(); ???????// 从请求参数中获取上传文件的类型:File/Image/Flash ???????String typeStr = request.getParameter("Type"); ???????if (typeStr == null) { ???????????typeStr = "File"; ???????} ???????if (debug) ???????????System.out.println(typeStr); ???????// 实例化dNow对象,获取当前时间 ???????Date dNow = new Date(); ???????// 设定上传文件路径 ???????String currentPath = baseDir + typeStr + "/" ???????????????+ dirFormatter.format(dNow); ???????// 获得web应用的上传路径 ???????String currentDirPath = getServletContext().getRealPath(currentPath); ???????// 判断文件夹是否存在,不存在则创建 ???????File dirTest = new File(currentDirPath); ???????if (!dirTest.exists()) { ???????????dirTest.mkdirs(); ???????} ???????// 将路径前加上web应用名 ???????currentPath = request.getContextPath() + currentPath; ???????if (debug) ???????????System.out.println(currentDirPath); ???????// 文件名和文件真实路径 ???????String newName = ""; ???????String fileUrl = ""; ???????if (enabled) { ???????????// 使用Apache Common组件中的fileupload进行文件上传 ???????????FileItemFactory factory = new DiskFileItemFactory(); ???????????ServletFileUpload upload = new ServletFileUpload(factory); ???????????try { ???????????????List items = upload.parseRequest(request); ???????????????Map fields = new HashMap(); ???????????????Iterator iter = items.iterator(); ???????????????while (iter.hasNext()) { ???????????????????FileItem item = (FileItem) iter.next(); ???????????????????if (item.isFormField()) ???????????????????????fields.put(item.getFieldName(), item.getString()); ???????????????????else ???????????????????????fields.put(item.getFieldName(), item); ???????????????} ???????????????// CEKditor中file域的name值是upload ???????????????FileItem uplFile = (FileItem) fields.get("upload"); ???????????????// 获取文件名并做处理 ???????????????String fileNameLong = uplFile.getName(); ???????????????fileNameLong = fileNameLong.replace(‘\\‘, ‘/‘); ???????????????String[] pathParts = fileNameLong.split("/"); ???????????????String fileName = pathParts[pathParts.length - 1]; ???????????????// 获取文件扩展名 ???????????????String ext = getExtension(fileName); ???????????????// 设置上传文件名 ???????????????fileName = fileFormatter.format(dNow) + "." + ext; ???????????????// 获取文件名(无扩展名) ???????????????String nameWithoutExt = getNameWithoutExtension(fileName); ????????????????File pathToSave = new File(currentDirPath, fileName); ???????????????fileUrl = currentPath + "/" + fileName; ???????????????if (extIsAllowed(typeStr, ext)) { ???????????????????int counter = 1; ???????????????????while (pathToSave.exists()) { ???????????????????????newName = nameWithoutExt + "_" + counter + "." + ext; ???????????????????????fileUrl = currentPath + "/" + newName; ???????????????????????pathToSave = new File(currentDirPath, newName); ???????????????????????counter++; ???????????????????} ???????????????????uplFile.write(pathToSave); ???????????????} else { ???????????????????if (debug) ???????????????????????System.out.println("无效的文件类型: " + ext); ???????????????} ???????????} catch (Exception ex) { ???????????????if (debug) ???????????????????ex.printStackTrace(); ???????????} ???????} else { ???????????if (debug) ???????????????System.out.println("未开启CKEditor上传功能"); ???????} ???????// CKEditorFuncNum是回调时显示的位置,这个参数必须有 ???????String callback = request.getParameter("CKEditorFuncNum"); ???????out.println("<script type=\"text/javascript\">"); ???????out.println("window.parent.CKEDITOR.tools.callFunction(" + callback ???????????????+ ",‘" + fileUrl + "‘,‘‘" + ")"); ???????out.println("</script>"); ???????out.flush(); ???????out.close(); ???????if (debug) ???????????System.out.println("--- END DOPOST ---"); ???} ????/** ????* 获取文件名的方法 ????*/ ???private static String getNameWithoutExtension(String fileName) { ???????return fileName.substring(0, fileName.lastIndexOf(".")); ???} ????/** ????* 获取扩展名的方法 ????*/ ???private String getExtension(String fileName) { ???????return fileName.substring(fileName.lastIndexOf(".") + 1); ???} ????/** ????* 字符串像ArrayList转化的方法 ????*/ ????private ArrayList stringToArrayList(String str) { ???????if (debug) ???????????System.out.println(str); ???????String[] strArr = str.split("\\|"); ???????ArrayList tmp = new ArrayList(); ???????if (str.length() > 0) { ???????????for (int i = 0; i < strArr.length; ++i) { ???????????????if (debug) ???????????????????System.out.println(i + " - " + strArr[i]); ???????????????tmp.add(strArr[i].toLowerCase()); ???????????} ???????} ???????return tmp; ???} ????/** ????* 判断扩展名是否允许的方法 ????*/ ???private boolean extIsAllowed(String fileType, String ext) { ???????ext = ext.toLowerCase(); ???????ArrayList allowList = (ArrayList) allowedExtensions.get(fileType); ???????ArrayList denyList = (ArrayList) deniedExtensions.get(fileType); ???????if (allowList.size() == 0) { ???????????if (denyList.contains(ext)) { ???????????????return false; ???????????} else { ???????????????return true; ???????????} ???????} ???????if (denyList.size() == 0) { ???????????if (allowList.contains(ext)) { ???????????????return true; ???????????} else { ???????????????return false; ???????????} ???????} ???????return false; ???} }
View Code

测试页面

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% ???String path = request.getContextPath(); ???pageContext.setAttribute("path",path);%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><script type="text/javascript" src="/ckeditor/ckeditor/ckeditor.js"></script><title>CKEditor</title><style type="text/css">* { ???font-family: "宋体"; ???font-size: 14px}</style> </head><body><form id="form1" name="form1" method="post" action="/ckeditor/display.jsp"><table width="650" height="400" border="0" align="center"> ????<tr> ???????<td>主题:</td> ???????<td><input name="title" type="text" id="title" size="80" ???????????maxlength="80" /></td> ???</tr> ???<tr> ???????<td valign="top">内容:</td> ???????<td><textarea cols="80" id="content" name="content"> ?????</textarea> ??????????<script type="text/javascript"> ???????????CKEDITOR.replace(‘content‘,{filebrowserUploadUrl : ‘${path}/ckeditor/uploader?Type=File‘, ???????????filebrowserImageUploadUrl : ‘${path}/ckeditor/uploader?Type=Image‘, ???????????filebrowserFlashUploadUrl : ‘${path}/ckeditor/uploader?Type=Flash‘ ???????????}); ???????</script></td> ???</tr> ???<tr> ???????<td></td> ???????<td><input type="submit" name="Submit" value="提交" /> <input ???????????type="reset" name="Reset" value="重置" /></td> ???</tr></table></form></body></html>
View Code

display.jsp

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Display Content</title></head><%request.setCharacterEncoding("UTF-8"); %><center><table width="600" border="0" bordercolor="000000" ???style="table-layout: fixed;"> ???<tr> ???????<td width="100" bordercolor="ffffff">主题:</td> ???????<td width="500" bordercolor="ffffff">${param.title}</td> ???</tr> ???<tr> ???????<td valign="top" bordercolor="ffffff">内容:</td> ???????<td valign="top" bordercolor="ffffff">${param.content}</td> ???</tr></table></center></html>
View Code

ckeditor 实现 servlet 图片上传 配置

原文地址:https://www.cnblogs.com/xylic1128/p/9267894.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved