云盘开发利器elfinder

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 14:10   44   0

elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序。

elFinder 的安装方法很简单,按照以下几个步骤即可:

1. 引入 jQuery 和 jQuery UI 包

  1. <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
  2. <script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>
  3. <link rel="stylesheet" href="js/ui-themes/base/ui.all.css" type="text/css" media="screen" charset="utf-8">

2. 引入 elFinder 包

  1. <script src="js/elfinder.min.js" type="text/javascript" charset="utf-8"></script>
  2. <link rel="stylesheet" href="css/elfinder.css" type="text/css" media="screen" charset="utf-8">


3. 引入本地化包

  1. <script src="js/i18n/elfinder.ru.js" type="text/javascript" charset="utf-8"></script>

4. 初始化服务器端的连接器

  1. <script type="text/javascript" charset="utf-8">
  2. $().ready({
  3. $('#my-div').elfinder({
  4. url : 'connectors/php/connector.php',
  5. lang : 'ru'
  6. })
  7. })
  8. </script>

从这段代码可以看出,elfinder主要提供的是一个基于jquery的管理前端,当用户执行“浏览目录”“查看文件”“删除文件”等操作的时候,实际上,前端js会链接到后端的对应操作模块(类似于connector.php?command=dir)。


目前已经有一些较成熟的elfinder后端,包括PHP、Java、.NET等不同版本的。这里介绍一款基于Java-Servlet的后端:elfinder-2.x-servlet,该项目完全开源,地址:https://github.com/bluejoe2008/elfinder-2.x-servlet


elfinder-2.x-servlet支持如下操作:

  • DIM
  • DUPLICATE
  • FILE
  • GET
  • LS
  • MKDIR
  • MKFILE
  • OPEN
  • PARENT
  • PASTE
  • PUT
  • RENAME
  • RM
  • SEARCH
  • SIZE
  • TMB
  • TREE
  • UPLOAD
elfinder-2.x-servlet基于spring框架开发,因此也很容易与java web系统相集成。

  1. <servlet>
  2. <servlet-name>elfinder</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet
  4. </servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>elfinder</servlet-name>
  8. <url-pattern>/elfinder-servlet/*</url-pattern>
  9. </servlet-mapping>

对应的spring配置文件:

  1. <!-- find appropriate command executor for given command-->
  2. <bean id="commandExecutorFactory"
  3. class="cn.bluejoe.elfinder.controller.executor.DefaultCommandExecutorFactory">
  4. <property name="classNamePattern"
  5. value="cn.bluejoe.elfinder.controller.executors.%sCommandExecutor" />
  6. <property name="map">
  7. <map>
  8. <!--
  9. <entry key="tree">
  10. <bean class="cn.bluejoe.elfinder.controller.executors.TreeCommandExecutor" />
  11. </entry>
  12. -->
  13. </map>
  14. </property>
  15. </bean>
  16. <!-- FsService is often retrieved from HttpRequest -->
  17. <!-- while a static FsService is defined here -->
  18. <bean id="fsServiceFactory" class="cn.bluejoe.elfinder.impl.StaticFsServiceFactory">
  19. <property name="fsService">
  20. <bean class="cn.bluejoe.elfinder.impl.DefaultFsService">
  21. <property name="serviceConfig">
  22. <bean class="cn.bluejoe.elfinder.impl.DefaultFsServiceConfig">
  23. <property name="tmbWidth" value="80" />
  24. </bean>
  25. </property>
  26. <property name="volumeMap">
  27. <!-- two volumes are mounted here -->
  28. <map>
  29. <entry key="A">
  30. <bean class="cn.bluejoe.elfinder.localfs.LocalFsVolume">
  31. <property name="name" value="MyFiles" />
  32. <property name="rootDir" value="/tmp/a" />
  33. </bean>
  34. </entry>
  35. <entry key="B">
  36. <bean class="cn.bluejoe.elfinder.localfs.LocalFsVolume">
  37. <property name="name" value="Shared" />
  38. <property name="rootDir" value="/tmp/b" />
  39. </bean>
  40. </entry>
  41. </map>
  42. </property>
  43. <property name="securityChecker">
  44. <bean class="cn.bluejoe.elfinder.impl.FsSecurityCheckerChain">
  45. <property name="filterMappings">
  46. <list>
  47. <bean class="cn.bluejoe.elfinder.impl.FsSecurityCheckFilterMapping">
  48. <property name="pattern" value="A_.*" />
  49. <property name="checker">
  50. <bean class="cn.bluejoe.elfinder.impl.FsSecurityCheckForAll">
  51. <property name="readable" value="true" />
  52. <property name="writable" value="true" />
  53. </bean>
  54. </property>
  55. </bean>
  56. <bean class="cn.bluejoe.elfinder.impl.FsSecurityCheckFilterMapping">
  57. <property name="pattern" value="B_.*" />
  58. <property name="checker">
  59. <bean class="cn.bluejoe.elfinder.impl.FsSecurityCheckForAll">
  60. <property name="readable" value="true" />
  61. <property name="writable" value="false" />
  62. </bean>
  63. </property>
  64. </bean>
  65. </list>
  66. </property>
  67. </bean>
  68. </property>
  69. </bean>
  70. </property>
  71. </bean>

这里面展示了一个包含了2个卷的文件目录结构,分别映射到/tmp/a和/tmp/b目录下。

但一般云盘系统可能不会严格对应于某个静态的目录,甚至会根据用户的账号来动态构造目录结构。

elfinder-2.x-servlet充分考虑到了这一点,提供了FsServiceFactory接口,用以实现这种动态的需求:

  1. public class MyServiceFactory implements FsServiceFactory
  2. {
  3. FsService getFileService(HttpServletRequest request, ServletContext servletContext)
  4. {
  5. //获取到用户名
  6. String username = request.getUserPrincipal().getName();
  7. //读取文件资源表
  8. //构造FsVolume及子目录。。。
  9. }
  10. }

更多帮助信息参见https://github.com/bluejoe2008/elfinder-2.x-servlet

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP