ckfinder的使用,根据官网向导(CKFinder_2.x/Developers_Guide)自己写的笔记 1、将ckfinder_java_2.4.3CKFinder-Java-2.4.3ckfinder目录放到根目录下面,WEB-INF/lib中的jar文件全部放到项目中的lib下面 2、将config.xml放到WEB-INF目录下面 3、修改config.xml文件下的配置 <enabled>true</enabled> <!–修改为true,表示开启ckfinder功能。默认是false–!> 4、 支持以下服务 Tomcat 5.5-7,Jetty 7-9,JBoss 6-7,GlassFish 3.0-4.0,Weblogic 11g-12c. —————– 了解config.xml配置 ———————-
5、1)如果是购买ckfinder,需要更改config.xml
<licenseKey>put your license name here</licenseKey> <licenseName>put your license key here</licenseName>
2)配置ckfinder处理的资源路径,上传文件存放的路径。例如:
<baseURL>/CKFinderJava/userfiles/</baseURL> <baseURL>http://example.com/CKFinderJava/userfiles/</baseURL>
3)服务直接路径,图片上传后的位置,是物理地址的全路径而不是相对路径,最后加“/”
<baseDir>/usr/tomcat-6.0.32/webapps/CKFinderJava/userfiles/</baseDir> <baseDir>C:tomcat-6.0.32webappsCKFinderJavauserfiles</baseDir>
注意:如果baseDir设置不写,参考baseURL的路径。但是baseURL是网页地址时,不会覆盖
6、Access Control 访问权限,使ckfinder更安全 1)在config.xml文件中添加以下语句: <accessControls> <accessControl> <role>*</role> //设置用户类型 <resourceType>*</resourceType> //不同资源如images,flash,files <folder>/</folder> //默认“/”是没有文件夹设置 <folderView>true</folderView> //以下设置true代表有效,false代表无效 <folderCreate>true</folderCreate> <folderRename>true</folderRename> <folderDelete>true</folderDelete> <fileView>true</fileView> <fileUpload>true</fileUpload> <fileRename>true</fileRename> <fileDelete>true</fileDelete> </accessControl> </accessControls> 2)在config.xml文件中配置用户角色session变量 <userRoleSessionVar>CKFinder_UserRole</userRoleSessionVar> 3)在java代码中合适的位置,比如login()方法里,添加以下代码。 设置一个用户角色名,如“admin” HttpSession session = request.getSession(true); session.setAttribute(“CKFinder_UserRole”, “admin”); 4)注意:系统会在访问yoursite/ckfinder2.3.1/ckfinder.html时(包括点击下图的“浏览服务器”按钮), 检查CKFinder_UserRole的值是什么,它具有的权限是什么。如果一个人没有登录系统,而是直接访问 yoursite/ckfinder2.3.1/ckfinder.html,那么系统就会检查到CKFinder_UserRole是null, 他就看不到服务器上的文件。 7、ckfinder允许创建缩略图,使用设置的大小浏览图片 1)设置缩略图参数 <thumbs> <enabled>true</enabled> <url>�SE_URL%_thumbs/</url> <directory>�SE_DIR%_thumbs</directory> <directAccess>false</directAccess> //设置为true,直接从_thumbs文件夹中加载缩略图,其他目录下时不能使用 <maxHeight>100</maxHeight> <maxWidth>100</maxWidth> <quality>80</quality> //设置范围[0-100],可接受值是45左右,一般设置为80 </thumbs> 2)你也可以指定图片的上传大小,如果图片比设置范围大时,将会按指定的大小加载。 <imgWidth>1600</imgWidth> <imgHeight>1200</imgHeight> <imgQuality>80</imgQuality> //范围是0-100 8、资源类型是不同路径下,组织文件的方法,每一种路径有着不同的配置,下面是两种资源类型: 1) 内置的类型有三种files, images, and Flash objects. 在config.xml文件中已经进行了配置<type>…</type>,自己查看一下。 <types> <type name=”Flash”> <url>�SE_URL%flash/</url> //url和directory的定义规则与baseURL和baseDir相同 <directory>�SE_DIR%flash</directory> <maxSize>0</maxSize> //定义上传图片的字节大小,可以使用G,M,K单位 <allowedExtensions>swf,flv</allowedExtensions> //允许上传的格式 <deniedExtensions></deniedExtensions> //不允许长传的格式 </type> <type name=”Files”>…</type> <type name=”Images”>…</type> </types> 2)如果添加新的资源类型,也可以再config.xml中进行配置,例如: <types> <type name=”MSdocs”> <url>�SE_URL%MSdocs/</url> <directory>�SE_DIR%MSdocs</directory> <maxSize>2M</maxSize> <allowedExtensions>doc,ppt,xls</allowedExtensions> <deniedExtensions></deniedExtensions> </type> </types> 9、安全问题 1)多个后缀文件读取时,不只是检查最后一个后缀名,如果设置.php文件不允许上传,而.rar文件允许上传, 则foo.php.rar文件将不会被上传,将会被重命名为foo_php.rar <checkDoubleExtension>true</checkDoubleExtension> 2)检查是不是图片文件,不仅仅是后缀名正确,后缀名为jpeg的文本文件不能成功上传到图片。 <secureImageUploads>true</secureImageUploads> 3)允许上传的文件中包含html代码的文件类型
<htmlExtensions>html, htm, xml, js, xsl</htmlExtensions>
4)如果设置为true,在创建文件夹或者上传文件时,名字里不能包含不安全的字符 <disallowUnsafeCharacters>false</disallowUnsafeCharacters>
10、//配置编码类型 <uriEncoding>ISO-8859-1</uriEncoding> //对用户隐藏文件夹,可以使用*和?,分别代表多个和一个类型 <hideFolders> <folder>.svn</folder> <folder>CVS</folder> </hideFolders> //对用户隐藏文件 <hideFiles> <file>.*</file> </hideFiles> ————————– 11、用Java类实现对配置文件config.xml的修改 1)在web.xml中添加ConnectorServlet,在servlet下添加配置参数 <init-param> <param-name>configuration</param-name> <param-value>包名.MyConfiguration类名</param-value> </init-param> 2)编写MyConfiguration类,可以添加这些方法:init, checkAuthentication, prepareConfigurationForRequest,and specific getter methods.
public class MyConfiguration extends Configuration {
public MyConfiguration(ServletConfig servletConfig) { super(servletConfig); #1、 @Override protected Configuration createConfigurationInstance() { return new MyConfiguration(this.servletConf); } } #2、该示例是修改config.xml中的资源类型 @Override public void init() throws Exception { super.init(); this.baseURL = “/CKFinderJava/userfiles/”; ResourceType resourceType = this.types.get(“Files”); resourceType.setAllowedExtensions( resourceType.getAllowedExtensions().concat(“,zip,7z”)); } #3、该方法允许添加自己的检查,例子:通过测试”loggedIn”session检查用户是否被写进日志 @Override public boolean checkAuthentication(final HttpServletRequest request) { return request.getSession().getAttribute(“loggedIn”) != null; } #4、例子:修改xml文件中<licenseName>标签能被重写 @Override public String getLicenseName() { return “MyLicenseName”; } 12、web.xml中配置ConectorServlet,然后在servlet配置下添加配置Java类<init-param>configuration 1)<servlet> <servlet-name>ConnectorServlet</servlet-name> <servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class> <init-param> <param-name>XMLConfig</param-name> <param-value>/WEB-INF/config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ConnectorServlet</servlet-name> //虚拟的映射路径 <url-pattern> /ckfinder/core/connector/java/connector.java </url-pattern> </servlet-mapping> 2)配置过滤器 <filter> <filter-name>FileUploadFilter</filter-name> <filter-class>com.ckfinder.connector.FileUploadFilter</filter-class> <init-param> <param-name>sessionCookieName</param-name> <param-value>JSESSIONID</param-value> </init-param> <init-param> <param-name>sessionParameterName</param-name> <param-value>jsessionid</param-value> </init-param> </filter> <filter-mapping> <filter-name>FileUploadFilter</filter-name> <url-pattern>/ckfinder/core/connector/java/connector.java</url-pattern>
</filter-mapping>
13、页面使用ckfinder标签 <%@ taglib uri=”http://cksource.com/ckfinder” prefix=”ckfinder” %>