PHP服务器文件管理器开发小结(七):应用jQueryUI预览服务器图片

上一节讨论了利用jQueryUI实现用户友好的新建、查看和编辑文件的界面。然而,这些界面都是针对纯文本的,如果是图像的话,查看文件仅提供纯文本就很不友好了。因此,需要为前端提供图像浏览的方法。

先提供前端JavaScript的代码,首先是“原材料”:

<div id="dialogImage" style="display:none">
	<img  src="" id="imgView"/>
</div>

然后在onElemAct中添加:

	case "image":
		$(‘#imgView‘).attr(‘src‘, strViewPath);
		$(‘#dialogImage‘).dialog({
			height:‘auto‘,
			width:‘auto‘,
			position:{my:‘center‘,at:‘center‘,collision:‘fit‘},
			modal:false,
			draggable:true,
			resizable:true,
			title:‘View Image‘,
			show:‘slide‘,
			hide:‘explode‘
		});
		break;

很简单,只要将图片的路径填充到<img>控件中就好啦~~~

然后,在服务端getFileElemInfo中,根据文件的后缀名判断是否是图像文件:

$fileExt = strtolower(end(explode(".", $elemName)));
    $listImgExt = array("bmp", "png", "jpg", "jpeg", "gif", "ico");
    if (in_array($fileExt, $listImgExt))
    {
        $viewMode = "image";
    }
    else 
    {
        $viewMode= "content";
    }
    $encodedFilePath = urlencode($filePath);
    if (is_readable($filePath)) $info.= "<li><a href=\"#\" title=\"view\" onClick=\"onElemAct(‘$viewMode‘,‘$encodedFilePath‘)\"><img src=\"images/view32.png\" alt=\"\" class=\"tabmenu\"/></a></li>";

看起来很美,似乎已经一切OK了,但是实际使用时,点击出来的都是错误的图标……

在网页上查看源码,会发现在img中填充的是图像文件在服务器上的路径。然而,用于远程图像浏览的应该是相对路径,因此需要从绝对路径向相对路径进行转化。

首先,需要获取服务器上的本地路径名:

$_SESSION["index"]=__FILE__;

之所以使用SESSION,因为展示的网页和获取图像路径的PHP路径可能有差异。

应用路径分析的方法获取相对路径:

function getRelativePath($currPath, $targetPath)
{
    $targetFile = basename($targetPath);
    $listCurr = explode("/", $currPath);
    array_pop($listCurr);
    $listTarget = explode("/", $targetPath);
    array_pop($listTarget);
    $countCurr = count($listCurr);
    $countTarget = count($listTarget);
    $i=0;
    while ($i<$countCurr && $i<$countTarget)
    {
        if ($listCurr[$i] != $listTarget[$i]) break;
        ++$i;
    }
    $relPath = "";
    for ($j = $i; $j < $countCurr; ++$j) $relPath.="../";
    for ($j=$i; $j<$countTarget; ++$j) $relPath.=$listTarget[$j]."/";
    $relPath.=$targetFile;
    return $relPath;
}

基本思路是,找到两个路径的第一个分叉口,然后先从当前路径填足够的"../",然后再缀以目标路径的分叉部分。

最后,修改文件属性列举部分的代码:

    $fileExt = strtolower(end(explode(".", $elemName)));
    $listImgExt = array("bmp", "png", "jpg", "jpeg", "gif", "ico");
    if (in_array($fileExt, $listImgExt))
    {
        $viewMode = "image";
        $encodedFilePath = getRelativePath($_SESSION["index"], $filePath);
    }
    else 
    {
        $viewMode= "content";
        $encodedFilePath = urlencode($filePath);
    }
    $info.= "<td><ul class=\"operations\">";    
    if (is_readable($filePath)) $info.= "<li><a href=\"#\" title=\"view\" onClick=\"onElemAct(‘$viewMode‘,‘$encodedFilePath‘)\"><img src=\"images/view32.png\" alt=\"\" class=\"tabmenu\"/></a></li>";

具体效果如下图:

时间: 2024-10-04 18:14:10

PHP服务器文件管理器开发小结(七):应用jQueryUI预览服务器图片的相关文章

PHP服务器文件管理器开发小结(总结):总结、索引和源代码

PHP服务器文件管理器的开发经过前一阶段的介绍基本完成了功能搭建,包括目录的检索.增加.删除.重命名,文件的增加.浏览.修改.重命名.移动,以及文件的上传和下载等功能.本文对前一阶段工作的相关博文进行索引,并提供源代码供有兴趣的同学一同讨论. PHP服务器文件管理器开发小结(一):功能规划 本节讨论了文件管理器的目标功能和运行环境. PHP服务器文件管理器开发小结(二):版面设计和css 本节讨论了页面布局所需的css内容,并介绍了引入jQuery和jQueryUI的方法. PHP服务器文件管理

PHP服务器文件管理器开发小结(一):功能规划

为了更好的学习PHP.AJAX和LAMP等,为搭建PHP服务器打下基础,作者尝试开发一款基于PHP的服务器文件管理器,并且在管理过程中使用AJAX而不刷新页面. 文件管理器包含以下基本操作 当前文件夹 回到首文件夹 回到上一级文件夹 刷新文件夹视图 上传文件 新建文件 新建子文件夹 文件操作 查看内容 编辑内容 下载 重命名 移动 删除 文件夹操作 重命名 删除 基本上实现了以上功能后,一个比较完善的服务器文件管理器就形成了. 注意,本示例仅考虑Apache可操作的权限,不考虑提权的情况. 管理

PHP服务器文件管理器开发小结(三):使用jQuery提交AJAX请求

本节将讨论使用jQuery提交AJAX请求的基本方法,并完成显示首文件夹的基本方法. 同时,本节也将讨论使用图片链接提交请求的基本方法. jQuery是一套强大的JS库,将复杂的JS操作封装成简洁的语句,并提供对AJAX的支持.通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本.HTML.XML 或 JSON - 同时您能够把这些外部数据直接载入网页的被选元素中.编写常规的 AJAX 代码并不容易,因为不同的浏览器对 AJAX 的实现

PHP服务器文件管理器开发小结(六):使用jQueryUI实现新建、查看和编辑文件

前面几节所做的操作都是对服务器内容的读取,下面开始探讨若干会牵扯到修改服务器的操作. 首先是在当前文件夹下新建文件,对应着文件夹上方的New File菜单项. <li><a href="#" title="new file" onClick="onNewFile()"><img src="images/newfile48.png" class="topmenu" />&l

PHP服务器文件管理器开发小结(二):版面设计和css

首先是引用jQuery和jQueryUI的方法,为了减轻服务器的压力,作者引用了第三方的源: <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css"> <script type="text/javascript" src="http://code.jquery.com/jquery-1.

PHP服务器文件管理器开发小结(十):使用jQuery和iframe实现AJAX文件上传

上一节讨论了文件下载,这一节继续讨论文件上传. 众所周知,前端上传文件比较简单的办法就是使用文件控件<input type="file"/>.然而,如果我们需要上传过程是AJAX的,亦即上传过程不刷新页面,仅反馈需要的信息,那就需要更加精巧的设计了. 首先是上传文件图片链接: <li><a href="#" title="upload" onClick="onUploadFile()">&l

PHP服务器文件管理器开发小结(八):更多的操作——重命名、移动、删除

这一节介绍几个简单的文件操作的PHP实现:使用rename进行文件和文件夹的重命名以及移动,及使用unlink删除文件和使用rmdir删除文件夹. rename函数的基本语法是 rename($oldname, $newname) 即将$oldname对应的文件或文件夹重命名为$newname对应的文件和文件夹.如果前后名称对应的是同一路径,则该函数仅尝试重命名,否则将尝试移动文件并重命名. 使文件和文件夹重命名的情况基本类似,因此采用同一的处理模式: if (is_writable($file

PHP服务器文件管理器开发小结(九):jQuery动态表单实现文件下载

前文讨论的文件操作,无论是新建.编辑.移动.删除,都是服务端对本地文件系统的操作.这一节需要讨论一个涉及服务端和客户端协调进行的操作:文件下载. 简单的文件下载可以通过将相对路径写入超链接的方式进行,然而这样仅限于服务端Apache有下载权限的文档,如果需要支持对更多文件进行下载,仅仅使用这一方式就远远不够了.这里需要利用PHP的能力,在服务端"取出"文件并"推送"给客户端. 首先是生成下载图标链接: if (is_readable($filePath)) $inf

PHP服务器文件管理器开发小结(四):利用SESSION响应文件夹导航

书接上回,在首文件夹(HOME)图标的旁边是回到上级文件夹(UP)和刷新当前文件夹(REFRESH)两个图标,对应的图片链接为:         <li><a href="#" title="up" onClick="onUp()"><img src="images/upfolder48.png" class="topmenu" /></a></li&g