用過瀏覽器的開發人員都對大文件上傳與下載比較困擾,以前遇到了一個php文件夾上傳下載的問題,無奈之下本身開發了一套文件上傳控件,在這裏分享一下。但願能對你有所幫助。
功能介紹:
php
樹形目錄導航。您能夠經過樹型目錄導航和路徑導航欄快速跳轉到指定目錄。在跳轉後樹型目錄將會自動選中當前的目錄。
數據庫
路徑導航,點擊根目錄按鈕即可返根目錄json
文件和目錄重命名瀏覽器
點擊刪除按鈕服務器
點擊肯定後,頁面中的文件消失post
批量上傳文件ui
粘貼上傳url
複製文件夾、文件或圖片spa
在頁面中選擇好相應的上傳目錄,點擊粘貼上傳按鈕,數據便可快速開始上傳.net
批量上傳文件和文件夾
數據庫記錄
文件和目錄下載
批量下載
同時選擇多個須要下載的文件
而後點擊下載按鈕,設置下載目錄文件夾
點擊所有下載,開始下載
自動加載未上傳完的任務。在刷新瀏覽器或重啓電腦後仍然能夠自動加載未完成的任務。
下載完成後打開咱們設置的下載目錄文件夾,發現需下載的文件或文件夾確認已下載成功,經確認文件夾內的內容與下載文件夾內容一致
數據庫記錄
工程截圖
文件塊處理代碼
https://blog.csdn.net/alisky119/article/details/91491383
<?php
ob_start();
/*
控件每次向此文件POST數據
邏輯:
1.更新數據庫進度
2.將文件塊數據保存到服務器中。
更新記錄:
2014-04-09 增長文件塊驗證功能。
2017-07-11
簡化文件塊邏輯,
取消進度更新操做
*/
require '../vendor/autoload.php';
require('biz/up6_biz_event.php');
require('model/FileInf.php');
require('utils/FileBlockWriter.php');
require('utils/HttpHeader.php');
require('utils/PathTool.php');
use utils\FileBlockWriter;
$head = new HttpHeader();
$uid = $head->param("uid");
$fid = $head->param("id");
$md5 = $head->param("md5");
$lenSvr = $head->param("lenSvr");
$lenLoc = $head->param("lenLoc");
$blockOffset = $head->param("blockOffset");
$blockSize = $head->param("blockSize");
$blockIndex = $head->param("blockIndex");
$blockMd5 = $head->param("blockMd5");
$complete = (bool)$head->param("complete");
$pathSvr = $_POST["pathSvr"];
$pathSvr = PathTool::urldecode_path($pathSvr);
$pathTmp = $_FILES['file']['tmp_name'];//
//相關參數不能爲空
if ( (strlen($lenLoc)>0)
&& (strlen($uid)>0)
&& (strlen($fid)>0)
&& (strlen($blockOffset)>0)
&& !empty($pathSvr))
{
$verify = false;
$msg = "";
$md5Svr = "";
if(!empty($blockMd5))
{
$md5Svr = md5_file($pathTmp);
}
//驗證大小
$verify = intval($blockSize) == filesize($pathTmp);
if( !$verify )
{
$msg = "block size error sizeSvr:" . filesize($pathTmp) . " sizeLoc:" . $blockSize;
}
if( $verify && !empty($blockMd5) )
{
$verify = $md5Svr == $blockMd5;
if(!$verify) $msg = "block md5 error";
}
if( $verify )
{
//保存文件塊數據
$fbw = new FileBlockWriter();
if(0 == strcmp($blockIndex,"1")) $fbw->CreateFile($pathSvr,$lenLoc);
$fbw->write($blockOffset, $lenLoc, $pathSvr, $pathTmp);
up6_biz_event::file_post_block($fid, $blockIndex);
$obj = Array('msg'=>'ok', 'md5'=>$md5Svr, 'offset'=>$blockOffset);
$msg = json_encode($obj);
}
ob_clean();
echo $msg;
}
else
{
echo "param is null";
echo "uid:$uid<br/>";
echo "fid:$fid<br/>";
echo "md5:$md5<br/>";
echo "lenSvr:$lenSvr<br/>";
echo "lenLoc:$lenLoc<br/>";
echo "f_pos:$blockOffset<br/>";
echo "complete:$complete<br/>";
echo "pathSvr:$pathSvr<br/>";
}
header('Content-Length: ' . ob_get_length());
?>
控件包下載:
cab(x86):http://t.cn/Ai9pmG8S
cab(x64):http://t.cn/Ai9pm04B
示例下載:
php: http://t.cn/Ai9p3CKQ
在線教程:
php-文件管理器教程:http://j.mp/2MudPs3