公司要把一些新闻每天备份。想找个FCKeditor能把上传图片按日期分目录。没找到。自己动手改了一下。
java FCKeditor2.4 的上传在 net.fckeditor.connector下的 ConnectorServle类中。用XJad把类反编译了。
修改成下面代码:
package net.fckeditor.connector;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.fckeditor.handlers.CommandHandler;
import net.fckeditor.handlers.ConnectorHandler;
import net.fckeditor.handlers.ExtensionsHandler;
import net.fckeditor.handlers.RequestCycleHandler;
import net.fckeditor.handlers.ResourceTypeHandler;
import net.fckeditor.response.UploadResponse;
import net.fckeditor.response.XmlResponse;
import net.fckeditor.tool.Utils;
import net.fckeditor.tool.UtilsFile;
import net.fckeditor.tool.UtilsResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConnectorServlet extends HttpServlet
{
private static final long serialVersionUID = 0xb05049436ea5f077L;
private static final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class);
public ConnectorServlet()
{
}
public void init()
throws ServletException, IllegalArgumentException
{
String s = getServletContext().getRealPath(ConnectorHandler.getDefaultUserFilesPath());
File file = new File(s);
UtilsFile.checkDirAndCreate(file);
logger.info("ConnectorServlet successfully initialized!");
}
public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws ServletException, IOException
{
logger.debug("Entering ConnectorServlet#doGet");
httpservletresponse.setCharacterEncoding("UTF-8");
httpservletresponse.setContentType("application/xml; charset=UTF-8");
httpservletresponse.setHeader("Cache-Control", "no-cache");
PrintWriter printwriter = httpservletresponse.getWriter();
String s = httpservletrequest.getParameter("Command");
String s1 = httpservletrequest.getParameter("Type");
String s2 = httpservletrequest.getParameter("CurrentFolder");
logger.debug("Parameter Command: {}", s);
logger.debug("Parameter Type: {}", s1);
logger.debug("Parameter CurrentFolder: {}", s2);
XmlResponse xmlresponse;
if (!RequestCycleHandler.isEnabledForFileBrowsing(httpservletrequest))
xmlresponse = new XmlResponse(1, "The current user isn't authorized for file browsing!");
else
if (!CommandHandler.isValidForGet(s))
xmlresponse = new XmlResponse(1, "Invalid command specified");
else
if (s1 != null && !ResourceTypeHandler.isValid(s1))
xmlresponse = new XmlResponse(1, "Invalid resource type specified");
else
if (!UtilsFile.isValidPath(s2))
{
xmlresponse = new XmlResponse(1, "Invalid current folder specified");
} else
{
CommandHandler commandhandler = CommandHandler.getCommand(s);
ResourceTypeHandler resourcetypehandler = ResourceTypeHandler.getDefaultResourceType(s1);
String s3 = UtilsFile.constructServerSidePath(httpservletrequest, resourcetypehandler);
s3=s3+"/"+getDate(3);
String s4 = getServletContext().getRealPath(s3);
File file = new File(s4);
UtilsFile.checkDirAndCreate(file);
File file1 = new File(file, s2);
if (!file1.exists())
{
xmlresponse = new XmlResponse(102);
} else
{
xmlresponse = new XmlResponse(commandhandler, resourcetypehandler, s2, UtilsResponse.constructResponseUrl(httpservletrequest, resourcetypehandler, s2, true, ConnectorHandler.isFullUrl()));
if (commandhandler.equals(CommandHandler.GET_FOLDERS))
xmlresponse.setFolders(file1);
else
if (commandhandler.equals(CommandHandler.GET_FOLDERS_AND_FILES))
xmlresponse.setFoldersAndFiles(file1);
else
if (commandhandler.equals(CommandHandler.CREATE_FOLDER))
{
String s5 = UtilsFile.sanitizeFolderName(httpservletrequest.getParameter("NewFolderName"));
logger.debug("Parameter NewFolderName: {}", s5);
File file2 = new File(file1, s5);
byte byte0 = 110;
if (file2.exists())
byte0 = 101;
else
try
{
byte0 = ((byte)(file2.mkdir() ? 0 : 102));
}
catch (SecurityException securityexception)
{
byte0 = 103;
}
xmlresponse.setError(byte0);
}
}
}
printwriter.print(xmlresponse);
printwriter.flush();
printwriter.close();
logger.debug("Exiting ConnectorServlet#doGet");
}
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws ServletException, IOException
{
logger.debug("Entering Connector#doPost");
httpservletresponse.setCharacterEncoding("UTF-8");
httpservletresponse.setContentType("text/html; charset=UTF-8");
httpservletresponse.setHeader("Cache-Control", "no-cache");
PrintWriter printwriter = httpservletresponse.getWriter();
String s = httpservletrequest.getParameter("Command");
String s1 = httpservletrequest.getParameter("Type");
String s2 = httpservletrequest.getParameter("CurrentFolder");
logger.debug("Parameter Command: {}", s);
logger.debug("Parameter Type: {}", s1);
logger.debug("Parameter CurrentFolder: {}", s2);
if (Utils.isEmpty(s) && Utils.isEmpty(s2))
{
s = "QuickUpload";
s2 = "/";
}
UploadResponse uploadresponse;
if (!RequestCycleHandler.isEnabledForFileUpload(httpservletrequest))
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(203), null, null, "The current user isn't authorized for file upload!"
});
else
if (!CommandHandler.isValidForPost(s))
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(1), null, null, "Invalid command specified"
});
else
if (s1 != null && !ResourceTypeHandler.isValid(s1))
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(1), null, null, "Invalid resource type specified"
});
else
if (!UtilsFile.isValidPath(s2))
{
uploadresponse = UploadResponse.UR_INVALID_CURRENT_FOLDER;
} else
{
ResourceTypeHandler resourcetypehandler = ResourceTypeHandler.getDefaultResourceType(s1);
String s3 = UtilsFile.constructServerSidePath(httpservletrequest, resourcetypehandler);
s3=s3+"/"+getDate(3);
String s4 = getServletContext().getRealPath(s3);
File file = new File(s4);
UtilsFile.checkDirAndCreate(file);
File file1 = new File(file, s2);
if (!file1.exists())
{
uploadresponse = UploadResponse.UR_INVALID_CURRENT_FOLDER;
} else
{
String s5 = null;
DiskFileItemFactory diskfileitemfactory = new DiskFileItemFactory();
ServletFileUpload servletfileupload = new ServletFileUpload(diskfileitemfactory);
servletfileupload.setHeaderEncoding("UTF-8");
try
{
List list = servletfileupload.parseRequest(httpservletrequest);
FileItem fileitem = (FileItem)list.get(0);
String s6 = UtilsFile.sanitizeFileName(fileitem.getName());
String s7 = FilenameUtils.getName(s6);
String s8 = getDate(0);
String s9 = FilenameUtils.getExtension(s7);
s7 = s8.concat(".").concat(s9.toLowerCase());
if (!ExtensionsHandler.isAllowed(resourcetypehandler, s9))
{
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(202)
});
} else
{
File file2 = new File(file1, s7);
for (int i = 1; file2.exists(); i++)
{
s5 = s8.concat("_").concat(String.valueOf(i)).concat(".").concat(s9.toLowerCase());
file2 = new File(file1, s5);
}
if (Utils.isEmpty(s5)){
s2=s2+getDate(3)+"/";
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(0), UtilsResponse.constructResponseUrl(httpservletrequest, resourcetypehandler, s2, true, ConnectorHandler.isFullUrl()).concat(s7)
});
String aa=UtilsResponse.constructResponseUrl(httpservletrequest, resourcetypehandler, s2, true, ConnectorHandler.isFullUrl()).concat(s7);
}
else{
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(201), UtilsResponse.constructResponseUrl(httpservletrequest, resourcetypehandler, s2, true, ConnectorHandler.isFullUrl()).concat(s5), s5
});
}
if (resourcetypehandler.equals(ResourceTypeHandler.IMAGE) && ConnectorHandler.isSecureImageUploads())
{
if (UtilsFile.isImage(fileitem.getInputStream()))
{
fileitem.write(file2);
} else
{
fileitem.delete();
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(202)
});
}
} else
{
fileitem.write(file2);
}
}
}
catch (Exception exception)
{
uploadresponse = new UploadResponse(new Object[] {
Integer.valueOf(203)
});
}
}
}
printwriter.print(uploadresponse);
printwriter.flush();
printwriter.close();
logger.debug("Exiting Connector#doPost");
}
public static final String getDate(int i)
{
String as[] = {
"yyyyMMddHHmmssSSS", "yyyyMMddHHmmss", "yyMMddHHmmss", "yyyyMMdd", "yyyy-MM-dd", "HHmmssSSS", "HHmmss"
};
SimpleDateFormat simpledateformat = null;
try
{
simpledateformat = new SimpleDateFormat(as[i]);
}
catch (Exception exception)
{
exception.printStackTrace();
System.out.print(exception.toString());
return exception.toString();
}
return simpledateformat.format(new Date());
}
}
修改后上传的图片目录是/当天日期/当前时间.jpg 了. 不会出现中文乱码了。
在www.pjwqh.cn基础上修改的。感谢下作者。
分享到:
相关推荐
java fckeditor2.4 文本中的图片上传配制,项目Demo。在包里面包括fck以及一些详细的配制,直接部署在tomcat 5.0就可以运行!
这是fckeditor2.4源代码,具体怎么用我还没试,希望有下载并研究清楚的兄弟Q我啦,418767657
fckeditor-java-2.4-bin.zip
FckEditor for java 2.4 JSP配置详解 FckEditor for java 2.4 JSP配置详解
fckeditor-java-2.4-src.rar源代码,链接上源码之后可以更好的有利高效的编程。
最近想学习FCKeditor,在网上搜索了好久,资料不少,但就是跑不起来,因为我用的是2.4版本的,不是说的版本不对配置啰嗦就是根本包结构都不一样,无奈之下只好在官网上download了个demo跑了下好使,不过一看这demo不是J2EE...
前段时间在fck的官网上溜达的时候发现了 fckEditor for java 2.4X 的版本,没想到for java的也有新的版本出来了,用了那么老长时间的for java2.3 ,呵呵 于是就下来体验了一下,确实不错,而且fck2.6的版本,对文件的上传...
jsp环境下FCKeditor编辑器的应用,对于文本编辑非常有用且方便。
jsp已经配置好的fckeditor ,按照文档说明加入工程就能用。里面有详细的步骤和所有用到的jar包、
FCKeditor for java2.4 远程保存图片 java版 功能介绍: 在FCKeditor中复制网页内容时,其中的图片仍然保存在源站点上,当远程服务器路径做出更改或者关闭,本地图片将无法打开。给网友造成不好的印象,使用本功能...
web文本编辑器,大家可以来下载了试一试哈,多多支持我哈!
其中的几个包解决了jsp中所用的FCkeditor编辑器在上传中文文件图片时,文件名产生乱码的问题。我找了好久才找到的。分享给大家。希望跟我有同样问题的人不在苦苦寻找。其中的道理是:把那个中文名字的图片文件名字用...
包括fckeditor2.6.4+fckeditor-java-2.4.1配置所需资源包及fckeditor-java-2.4.1源码和配置说明文档。 配置中解决了中文乱码,并为上传文件自动创建日期文件夹。
一款好用JAVA fckeditor 在线文本编辑器
一款很好用的开源富文本编辑器,可以在jsp页面中使用,内附使用教程,找了好久才集齐的
包含sqljdbc、sqljdbc4、fckeditor-java-core-2.4、jtds-1.2.1、mysql-connector-java-5.0.8-bin-g、servlet-api、jstl-1.2的jar包
FCKeditor 2.4,一个很好的页面编辑器.
fckeditor-java-core-2.4.jar 中文乱码 文件重名 中文文件夹
Fckeditor_java_v2.4.chm