用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下。希望能对你有所帮助。

功能介绍:

树形目录导航。您可以通过树型目录导航和路径导航栏快速跳转到指定目录。在跳转后树型目录将会自动选中当前的目录。

路径导航,点击根目录按钮便可返根目录

文件和目录重命名

点击删除按钮

点击确定后,页面中的文件消失

批量上传文件

粘贴上传

复制文件夹、文件或图片

在页面中选择好相应的上传目录,点击粘贴上传按钮,数据即可快速开始上传

批量上传文件和文件夹

数据库记录

文件和目录下载

批量下载

同时选择多个需要下载的文件

然后点击下载按钮,设置下载目录文件夹

点击全部下载,开始下载

自动加载未上传完的任务。在刷新浏览器或重启电脑后仍然可以自动加载未完成的任务。

下载完成后打开我们设置的下载目录文件夹,发现需下载的文件或文件夹确认已下载成功,经确认文件夹内的内容与下载文件夹内容一致

数据库记录

工程截图

文件块处理代码

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

xpi:http://t.cn/Ai9pubUc

crx:http://t.cn/Ai9pmrcy

exe:http://t.cn/Ai9puobe

示例下载:

php: http://t.cn/Ai9p3CKQ

在线教程:

php-文件管理器教程:http://j.mp/2MudPs3

php上传文件夹的更多相关文章

  1. SFTP 上传文件夹

    使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...

  2. 使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? □ 在web.config中配置 1: <configuration> 2: <conf ...

  3. svs 在创建的时候 上传文件夹 bin obj 这些不要提交

    svs  在创建的时候 上传文件夹 bin  obj  这些不要提交  右键-去除版本控制并增加到忽略列表

  4. SpringBoot 上传文件夹

    前端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. oss上传文件夹-cloud2-泽优软件

    泽优软件云存储上传控件(cloud2)支持上传整个文件夹,并在云空间中保留文件夹的层级结构,同时在数据库中也写入层级结构信息.文件与文件夹层级结构关系通过id,pid字段关联. 本地文件夹结构 文件 ...

  6. MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  MVC文 ...

  7. msysgit 上传文件夹,规范化的日常

    在我们第一次成功的上传到github之后,要上传文件夹的我们要在msysgit里输入些什么呢? 选择要上传的文件夹前一项右键点击git bash here 进入msysgit后 首先初始化,输入 gi ...

  8. asp.net FileUpload上传文件夹并检测所有子文件

    1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...

  9. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(三):设置上传文件夹权限(这里测试用完全共享)

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  10. asp.net上传文件夹权限配置以及权限配置的分析

    切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...

随机推荐

  1. rdb和aof二种持久化方式对比(Redis)

    我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据.高并发.高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去 比如你re ...

  2. Python&Selenium智能等待方法封装

    摘要:本篇博文用几行代码展示Python和Selenium做自动化测试时常见的显示等待和封装 # 用于实现智能等待页面元素的出现 # encoding = utf-8 ""&quo ...

  3. setTimeout,promise,promise.then, async,await执行顺序问题

    今天下午看了好多关于这些执行顺序的问题  经过自己的实践 终于理解了  记录一下就拿网上出现频繁的代码来说: async function async1() { console.log('async1 ...

  4. 00-c#与设计模式目录

    工作5年多了,使用的语言是asp.net(c#),感觉自己遇到了技术瓶颈,以前一直忙着做兼职.接私活.加班,没有时间静下来好好想想自己的发展方向,就着春节期间放假,没事自己躺在老家的火炕上,问自己想要 ...

  5. Java笔记(第七篇 JDBC操作数据库)

    JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...

  6. SpringDataJpa 分页查询

    第一种方式 实体类 Student import javax.persistence.*; import java.io.Serializable; @Entity @Table(name=" ...

  7. mongodb的安装与使用(三)之 pymongo

    (一)连接MongoClient 连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口po ...

  8. 【LuoguP4482】[BJWC2018]Border 的四种求法

    题目链接 题意 区间 boder \(n,q\leq 2*10^5\) Sol (暴力哈希/SA可以水过) 字符串区间询问问题,考虑用 \(SAM\) 解决. boder相当于是询问区间 \([l,r ...

  9. Java日期工具类DateUtils详解(转)

    jar包 appache下的 common-lang3 一. 对指定的日期新增年.月.周.日.小时.分钟.秒.毫秒 public static Date addDays(Date date, int ...

  10. python-platform模块:平台相关属性

    import platform x=platform.machine() #返回平台架构 #AMD64 x=platform.node() #网络名称(主机名) #DESKTOP-KIK668C x= ...