文档章节

基于web的文件管理/目录结构展示(ufinder、elfinder)……的心路历程

tremory
 tremory
发布于 2015/07/22 22:02
字数 1095
阅读 488
收藏 1

    要在网页做一个类似windows“我的电脑”那种文件夹文件的展示,并且能上传下载删除重命名等功能。

(一)找JS插件,读取文件夹内容,利用插件展示

1.看到几个“推荐n款xxx的好用插件”,看了两个,一个treeview,一个叫ztree

读取文件内容的php代码是在百度知道看到的,改了一下。

function my_dir($directory)
{
	echo "<ul id='browser' class='filetree'>
			<li><span class=\"folder\">$directory</span>
				<ul>";
	$directory = iconv("utf-8","gb18030" , $directory);
	tree($directory);

	echo '</ul>
		</li>
		</ul>';


}
function tree($directory) 
{ 
	$mydir=dir($directory); 
	while($file=$mydir->read())
	{
		$filename = iconv("gb18030", "utf-8", $file);
		//目录下的文件是文件夹 
		if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!=".."))
		{ 
			echo "<li><span class=\"folder\">$filename</span>
						<ul>"; 
			tree("$directory/$file"); 
			echo '</ul>
				</li>';
		}
		//文件
		elseif (($file!=".") AND ($file!=".."))
		{ 
			echo "<li><span class=\"file\">$filename</span></li>"; 
			/*echo($file);
			echo($filename);*/
		} 
	} 
	$mydir->close(); 
}

效果大概是这样:

但是只能展示,功能不足,虽然有几种样式,但不够美观。

2. zTree自带编辑、异步等功能,但是没有后台程序,放弃。

(二)在线文档编辑插件/工具/控件。

悲剧就是从这里开始的。

找了很多,

  1. ajaxexplorer(好像叫这个名字)(后来改名叫pydio)、KODExplorer什么的,都是做好的整个系统样,不是我要找的只是插件,放弃

2.最开始的ufinder,后来兜兜转转找的elfinder,外观都是我需要的,大概是这样:

   这两个基本都差不多,感觉elfinder比ufinder好看一点点,功能多一点,只需要修改语言引入的<script>和lang的值就支持中文(和各种语言)了,当然,代码也更复杂更难理解。

    把特!遇到中文的文件却读不出来。

    后来发现原因是我的文件是在windows系统下,它们的编码都是GBK,而代码的编码都是UTF-8,代码中的json_encode函数也只支持utf8编码。解决思路有两种,一是把所有函数参数接收参数后、返回值之前用iconv进行转码,在函数内部使用代码本身的utf8,将ufinder的init和ls函数(感觉是初始化和显示的函数)改过之后能显示中文文件夹了,想了一下,重命名、删除、新建,函数太多,改起来太累,有没有其他方法。第二种,把代码中的数据GBK编码,以为这样就跟windows统一了。但是失败了,因为json_encode只支持utf8。

于是在网上找到一个能把GBK编码成json的函数:

function ch_json_encode($data) {
   
   function ch_urlencode($data) {
       if (is_array($data) || is_object($data)) {
           foreach ($data as $k => $v) {
               if (is_scalar($v)) {
                   if (is_array($data)) {
                       $data[$k] = urlencode($v);
                   } else if (is_object($data)) {
                       $data->$k = urlencode($v);
                   }
               } else if (is_array($data)) {
                   $data[$k] = ch_urlencode($v); //µÝ¹éµ÷Óøú¯Êý
               } else if (is_object($data)) {
                   $data->$k = ch_urlencode($v);
               }
           }
       }
       return $data;
   }
   
   $ret = ch_urlencode($data);
   $ret = json_encode($ret);
   return urldecode($ret);
}

    再后来,看到哪个网页说json都不支持gbk我就哭了。

    迫不得已,第三种思路,想有没有其他直接支持windows下文件的插件,于是找到了elfinder。后来发现虽然它支持中文,但是windows下的GBK还是读不出文件。不过有一点比ufinder好,ufinder遇到中文文件,整个所在文件夹内所有文件都会显示不出,而elfinder只是单个文件出错。

    目前,准备修改按第一种想法,改……

    所以,有没有人有现成的、或者简单的解决方法啊 TT……


    后续

    由于这个功能是要在linux下使用的,gbk编码的文件无法读取的问题直接就忽略掉了,所以也没找到解决的方法。==

    如果是在linux下使用的话,只需要修改JS的引入就可以支持中文了。再可能就是需要修改一下文件夹的权限;再然后就是对中文文件名的检查。在 http://www.oschina.net/question/921067_83470  中3楼“ywh1981”的方法有效:

    elFinderVolumeDriver.class.php文件中有一句 

            'acceptedName'    => '/^\w[\w\s\.\%\-\(\)\[\]]*$/u',

    这一项是用于检查文件和目录名称的正则的,把它设置为'',对新建或者上传的文件目录名就不检查了。

    这样,就结束了,linux下基本能用了。


© 著作权归作者所有

共有 人打赏支持
tremory
粉丝 1
博文 5
码字总数 2471
作品 0
成都
程序员
私信 提问
OSCHINA 6-5 期推荐 Web文件管理器elFinder

OSCHINA 6-5(6月第5周) 期推荐的开源软件是elFinder。elFinder是基于Web的开源文件管理器,用JavaScript编写,使用了jQuery UI,灵感来自 Mac OS X 的 Finder 程序。 elFinder的主要目标是...

小卒过河
2011/06/26
2.4K
3
使用 elFinder 实现 Web 的文件管理器

elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序。 elFinder 的安装方法很简单,按照以下几个步骤即可: 1. 引入 jQuery 和 jQuery UI 包 2. 引入 elFinder 包 3....

红薯
2011/06/26
18.2K
37
elFinder 2.0 RC1 发布,Web 文件管理器

elFinder 2.0 对整个项目进行了重写,实现了之前所有的特性之外,还包括多根路径的支持、HTML5 上传、完全拖放操作、MySQL 和 FTP 文件存储驱动、高级图像编辑、富客户端和连接器 API,新的 ...

红薯
2012/04/11
1K
1
基于spring-boot和elfinder的在线文件管理

大家好,我是帅气小伙,今天为大家分享的是一个轮子,最近在项目中需要一些CMS的功能,在线管理一些静态资源文件,在经过一番资料查找,最终决定使用elfinder。它的官方Java集成还是有点坑的...

帅气小伙
2018/05/26
0
0
elFinder servlet 设置

@红薯 你好,想跟你请教个问题: 需要请教关于elFinder-servlet的配置问题。我是将elFinder-servlet作为一个jar包引入一个web工程,想通过elFinder实现管理本地文件的功能。 工程中jsp文件配...

兔子爱吃胡萝卜
2014/03/12
569
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
33分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
37分钟前
2
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

吴伟祥
39分钟前
1
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
5
0
Amino——产品迭代

兴趣部落产品迭代 时间 版本号 更新内容 备注 2019年1月2日 v3.1.1 支持定制部落首页的内容tab,酋长可以将精华、相册、分类添加到部落首页啦。 支持申请酋长,酋长可以直接推送优质话题,快...

铸剑为犁413
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部