JSP中fckeditor控件表情修改以及文件上传

来源:互联网 发布:mac os x 10.11.3 dmg 编辑:程序博客网 时间:2024/05/21 07:59

(一)fckeditor控件表情修改

fckconfig.js中的后面几个参数控制表情,你可以将下面几个参数拷贝到myconfig.js,并进行修改就可以了。
  1. FCKConfig.SmileyPath    = FCKConfig.BasePath + 'images/smiley/msn/' ; //图片的路径
  2. //图片的名字(数组)
  3. FCKConfig.SmileyImages  = ['aa.jpg','regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
  4. FCKConfig.SmileyColumns = 8 ;// 每行显示的个数
  5. FCKConfig.SmileyWindowWidth     = 320 ;//弹出窗口宽度
  6. FCKConfig.SmileyWindowHeight    = 210 ;//弹出窗口高度
如果想修改弹出的标签页面可以去fckeditor/editor/dialog/fck_smiley.html文件。
  1. //注释掉下面语句
  2. //dialog.SetAutoSize( true ) ;//根据页面内容的大小,修改当前窗口的合适大小
以及修改下面样式
  1. <!--将style类型更换
  2.         <body style="overflow: hidden">
  3. -->
  4. <body style="overflow: auto">

(二)fckeditor控件实现文件文件上传


在web.xml中添加下面配置
  1.     <servlet>
  2.       <servlet-name>Connector</servlet-name>
  3.         <servlet-class>
  4.           net.fckeditor.connector.ConnectorServlet
  5.       </servlet-class>
  6.       <load-on-startup>1</load-on-startup>
  7.     </servlet>
  8.     <servlet-mapping>
  9.       <servlet-name>Connector</servlet-name>
  10.       <url-pattern>
  11.         /fckeditor/editor/filemanager/connectors/*
  12.       </url-pattern>
在src目录下建立文件fckeditor.properties,并输入如下内容

  1. connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
重新发布项目,就可以实现服务器文件上传与浏览。


(三)fckeditor控件文件上传中文问题

上面虽然已经实现上传问题,单仍然存在中文乱码问题,具体解决办法如下:
自己新建一个ConnectorServlet,将源代码中原来ConnectorServlet的内容复制过来,并做简单修改。
图片名中文问题,解决方式如下:

(1)在dopost()方法中添加
    upload.setHeaderEncoding("utf-8");
(2)在创建文件夹时,也存在中文问题,需要在doget()方法中
String newFolderStr = UtilsFile.sanitizeFolderName(request.getParameter("NewFolderName"));
修改成
     String tmpStr=request.getParameter("NewFolderName");
     tmpStr=new String(tmpStr.getBytes("iso8859-1"),"utf-8");
     String newFolderStr = UtilsFile.sanitizeFolderName(tmpStr);

(3)虽然上面已经可以正常上传中文图片和创建中文文件夹,但是,中文图片却无法正常显示。
这里可以采用如下方式解决问题。上传以后采用其它非中文名称进行保存,这里采用
filename=UUID.randomUUID().toString()+"."+extension;来解决问题;
当然很多网站是采用当前日期生成对应文件名,这个也比较好。



具体代码如下
  1. package jCuckoo;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.List;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import net.fckeditor.connector.Messages;
  11. import net.fckeditor.handlers.CommandHandler;
  12. import net.fckeditor.handlers.ConnectorHandler;
  13. import net.fckeditor.handlers.ExtensionsHandler;
  14. import net.fckeditor.handlers.RequestCycleHandler;
  15. import net.fckeditor.handlers.ResourceTypeHandler;
  16. import net.fckeditor.response.UploadResponse;
  17. import net.fckeditor.response.XmlResponse;
  18. import net.fckeditor.tool.Utils;
  19. import net.fckeditor.tool.UtilsFile;
  20. import net.fckeditor.tool.UtilsResponse;
  21. import org.apache.commons.fileupload.FileItem;
  22. import org.apache.commons.fileupload.FileItemFactory;
  23. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  24. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  25. import org.apache.commons.io.FilenameUtils;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. public class ConnectorServlet extends HttpServlet {
  29.     private static final long serialVersionUID = -5742008970929377161L;
  30.     private static final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class);
  31.     public void init() throws ServletException, IllegalArgumentException {
  32.         String realDefaultUserFilesPath = getServletContext().getRealPath(
  33.                 ConnectorHandler.getDefaultUserFilesPath());
  34.         File defaultUserFilesDir = new File(realDefaultUserFilesPath);
  35.         UtilsFile.checkDirAndCreate(defaultUserFilesDir);
  36.         logger.info("ConnectorServlet successfully initialized!");
  37.     }
  38.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  39.             throws ServletException, IOException {
  40.         logger.debug("Entering ConnectorServlet#doGet");
  41.         response.setCharacterEncoding("UTF-8");
  42.         response.setContentType("application/xml; charset=UTF-8");
  43.         response.setHeader("Cache-Control""no-cache");
  44.         PrintWriter out = response.getWriter();
  45.         String commandStr = request.getParameter("Command");
  46.         String typeStr = request.getParameter("Type");
  47.         String currentFolderStr = request.getParameter("CurrentFolder");
  48.         logger.debug("Parameter Command: {}", commandStr);
  49.         logger.debug("Parameter Type: {}", typeStr);
  50.         logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
  51.         XmlResponse xr;
  52.         if (!RequestCycleHandler.isEnabledForFileBrowsing(request))
  53.             xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.NOT_AUTHORIZED_FOR_BROWSING);
  54.         else if (!CommandHandler.isValidForGet(commandStr))
  55.             xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_COMMAND);
  56.         else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
  57.             xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_TYPE);
  58.         else if (!UtilsFile.isValidPath(currentFolderStr))
  59.             xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_CURRENT_FOLDER);
  60.         else {
  61.             CommandHandler command = CommandHandler.getCommand(commandStr);
  62.             ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);
  63.             String typePath = UtilsFile.constructServerSidePath(request, resourceType);
  64.             String typeDirPath = getServletContext().getRealPath(typePath);
  65.             File typeDir = new File(typeDirPath);
  66.             UtilsFile.checkDirAndCreate(typeDir);
  67.             File currentDir = new File(typeDir, currentFolderStr);
  68.             if (!currentDir.exists())
  69.                 xr = new XmlResponse(XmlResponse.EN_INVALID_FOLDER_NAME);
  70.             else {
  71.                 xr = new XmlResponse(command, resourceType, currentFolderStr, UtilsResponse
  72.                         .constructResponseUrl(request, resourceType, currentFolderStr, true,
  73.                                 ConnectorHandler.isFullUrl()));
  74.                 if (command.equals(CommandHandler.GET_FOLDERS))
  75.                     xr.setFolders(currentDir);
  76.                 else if (command.equals(CommandHandler.GET_FOLDERS_AND_FILES))
  77.                     xr.setFoldersAndFiles(currentDir);
  78.                 else if (command.equals(CommandHandler.CREATE_FOLDER)) {
  79.                    
  80.                   String tmpStr=request.getParameter("NewFolderName");
  81.                   tmpStr=new String(tmpStr.getBytes("iso8859-1"),"utf-8");
  82.                   String newFolderStr = UtilsFile.sanitizeFolderName(tmpStr);
  83.                  logger.debug("Parameter NewFolderName: {}", newFolderStr);
  84.                     File newFolder = new File(currentDir, newFolderStr);
  85.                     int errorNumber = XmlResponse.EN_UKNOWN;
  86.                     if (newFolder.exists())
  87.                         errorNumber = XmlResponse.EN_ALREADY_EXISTS;
  88.                     else {
  89.                         try {
  90.                             errorNumber = (newFolder.mkdir()) ? XmlResponse.EN_OK
  91.                                     : XmlResponse.EN_INVALID_FOLDER_NAME;
  92.                         } catch (SecurityException e) {
  93.                             errorNumber = XmlResponse.EN_SECURITY_ERROR;
  94.                         }
  95.                     }
  96.                     xr.setError(errorNumber);
  97.                 }
  98.             }
  99.         }
  100.         out.print(xr);
  101.         out.flush();
  102.         out.close();
  103.         logger.debug("Exiting ConnectorServlet#doGet");
  104.     }
  105.     @SuppressWarnings("unchecked")
  106.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  107.             throws ServletException, IOException {
  108.         logger.debug("Entering Connector#doPost");
  109.         response.setCharacterEncoding("UTF-8");
  110.         response.setContentType("text/html; charset=UTF-8");
  111.         response.setHeader("Cache-Control""no-cache");
  112.         PrintWriter out = response.getWriter();
  113.         String commandStr = request.getParameter("Command");
  114.         String typeStr = request.getParameter("Type");
  115.         String currentFolderStr = request.getParameter("CurrentFolder");
  116.         logger.debug("Parameter Command: {}", commandStr);
  117.         logger.debug("Parameter Type: {}", typeStr);
  118.         logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
  119.         UploadResponse ur;
  120.         // if this is a QuickUpload request, 'commandStr' and 'currentFolderStr'
  121.         // are empty
  122.         if (Utils.isEmpty(commandStr) && Utils.isEmpty(currentFolderStr)) {
  123.             commandStr = "QuickUpload";
  124.             currentFolderStr = "/";
  125.         }
  126.         if (!RequestCycleHandler.isEnabledForFileUpload(request))
  127.             ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR, nullnull,
  128.                     Messages.NOT_AUTHORIZED_FOR_UPLOAD);
  129.         else if (!CommandHandler.isValidForPost(commandStr))
  130.             ur = new UploadResponse(UploadResponse.SC_ERROR, nullnull, Messages.INVALID_COMMAND);
  131.         else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
  132.             ur = new UploadResponse(UploadResponse.SC_ERROR, nullnull, Messages.INVALID_TYPE);
  133.         else if (!UtilsFile.isValidPath(currentFolderStr))
  134.             ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
  135.         else {
  136.             ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);
  137.             String typePath = UtilsFile.constructServerSidePath(request, resourceType);
  138.             String typeDirPath = getServletContext().getRealPath(typePath);
  139.             File typeDir = new File(typeDirPath);
  140.             UtilsFile.checkDirAndCreate(typeDir);
  141.             File currentDir = new File(typeDir, currentFolderStr);
  142.             if (!currentDir.exists())
  143.                 ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
  144.             else {
  145.                 String newFilename = null;
  146.                 FileItemFactory factory = new DiskFileItemFactory();
  147.                 ServletFileUpload upload = new ServletFileUpload(factory);
  148.                 
  149.                 //此处修改
  150.                 upload.setHeaderEncoding("utf-8");
  151.                 try {
  152.                     List<FileItem> items = upload.parseRequest(request);
  153.                     // We upload only one file at the same time
  154.                     FileItem uplFile = items.get(0);
  155.                     String rawName = UtilsFile.sanitizeFileName(uplFile.getName());
  156.                     String filename = FilenameUtils.getName(rawName);
  157.                     String baseName = FilenameUtils.removeExtension(filename);
  158.                     String extension = FilenameUtils.getExtension(filename);
  159.                     if (!ExtensionsHandler.isAllowed(resourceType, extension))
  160.                         ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
  161.                     else {
  162.                         // 将文件名字进行转换,换掉原先中文名字,当然可以采用日期产生文件的名字。
  163.                         filename=UUID.randomUUID().toString()+"."+extension;
  164.                         File pathToSave = new File(currentDir, filename);
  165.                         int counter = 1;
  166.                         while (pathToSave.exists()) {
  167.                             newFilename = baseName.concat("(").concat(String.valueOf(counter))
  168.                                     .concat(")").concat(".").concat(extension);
  169.                             pathToSave = new File(currentDir, newFilename);
  170.                             counter++;
  171.                         }
  172.                         if (Utils.isEmpty(newFilename))
  173.                             ur = new UploadResponse(UploadResponse.SC_OK, UtilsResponse
  174.                                     .constructResponseUrl(request, resourceType, currentFolderStr,
  175.                                             true, ConnectorHandler.isFullUrl()).concat(filename));
  176.                         else
  177.                             ur = new UploadResponse(UploadResponse.SC_RENAMED,
  178.                                     UtilsResponse.constructResponseUrl(request, resourceType,
  179.                                             currentFolderStr, true, ConnectorHandler.isFullUrl())
  180.                                             .concat(newFilename), newFilename);
  181.                         // secure image check
  182.                         if (resourceType.equals(ResourceTypeHandler.IMAGE)
  183.                                 && ConnectorHandler.isSecureImageUploads()) {
  184.                             if (UtilsFile.isImage(uplFile.getInputStream()))
  185.                                 uplFile.write(pathToSave);
  186.                             else {
  187.                                 uplFile.delete();
  188.                                 ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
  189.                             }
  190.                         } else
  191.                             uplFile.write(pathToSave);
  192.                     }
  193.                 } catch (Exception e) {
  194.                     ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR);
  195.                 }
  196.             }
  197.         }
  198.         out.print(ur);
  199.         out.flush();
  200.         out.close();
  201.         logger.debug("Exiting Connector#doPost");
  202.     }
  203. }

然后将web.xml中的servlet进行修改,具体修改如下:

  1.     <servlet>
  2.       <servlet-name>Connector</servlet-name>
  3.         <servlet-class>
  4.           jCuckoo.ConnectorServlet
  5.       </servlet-class>
  6.       <load-on-startup>1</load-on-startup>
  7.     </servlet>
  8.     <servlet-mapping>
  9.       <servlet-name>Connector</servlet-name>
  10.       <url-pattern>
  11.         /fckeditor/editor/filemanager/connectors/*
  12.       </url-pattern>
  13.     </servlet-mapping>

重新部署,发布就可以实现该功能。

原创粉丝点击