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

以下是实例的部分脚本文件与代码:

<?php

ob_start();

header('Content-Type: text/html;charset=utf-8');

/*

控件每次向此文件POST数据

逻辑:

1.更新数据库进度

2.将文件块数据保存到服务器中。

更新记录:

2014-04-09 增加文件块验证功能。

2014-09-12 完成逻辑。

2014-09-15 修复返回JSONP数据格式错误的问题。

2016-05-31 优化调用,DBFolder::Complete会自动更新文件表信息,所以在此页面不需要再单独调用DBFile::fd_complete

*/

require '../vendor/autoload.php';

require('biz/PathBuilder.php');

require('biz/PathBuilderUuid.php');

require('biz/up6_biz_event.php');

require('model/FileInf.php');

require('utils/fd_scan.php');

use database\DbHelper;

use database\DBFile;

use database\DBFolder;

$id      = $_GET["id"];

$uid = $_GET["uid"];

$cbk     = $_GET["callback"];//jsonp

$ret     = 0;

//参数为空

if ( strlen($uid) > 0

||  strlen($id) >0  )

{

$inf = new FileInf();

$db = new DBFile();

$db->read($id,$inf);

$root = $inf->pathSvr;

$fd = new DBFolder();

$fd->Complete($id, $uid);

$sa = new fd_scan();

$sa->root = $inf;

$sa->scan($inf,$root);

$db->fd_scan($id, $uid);

up6_biz_event::folder_post_complete($id);

$ret = 1;

}

echo "$cbk( $ret )";

header('Content-Length: ' . ob_get_length());

?>

分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。我们随机上传4个文件或文件夹

当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。如下图:

当重新打开网页时,只需要点击继续即可。

上传完成后,我们发现页面上已出现相应的文件或文件夹名称

查看我们的数据库会发现已经新建了当天的日期文件夹,点击查看

会发现随机生成的4个文件夹并存放,打开发现确认是我们上传的原文件或文件夹

上传测试成功

文件下载

部分下载脚本文件与代码:

<?php

require('../../db/database/DbHelper.php');

require('../../db/utils/PathTool.php');

require('../../db/model/FileInf.php');

require('../model/DnFileInf.php');

require('../biz/DnFile.php');

$id      = $_GET["id"];

$uid         = $_GET["uid"];

$fdTask = $_GET["fdTask"];

$nameLoc     = $_GET["nameLoc"];

$pathLoc     = $_GET["pathLoc"];

$lenSvr = $_GET["lenSvr"];

$sizeSvr     = $_GET["sizeSvr"];

$cbk         = $_GET["callback"];

$pathLoc = PathTool::urldecode_path($pathLoc);

$nameLoc = PathTool::urldecode_path($nameLoc);

$sizeSvr = PathTool::urldecode_path($sizeSvr);

if (  strlen($uid) < 1

||empty($pathLoc)

||empty($lenSvr))

{

echo cbk . "({\"value\":null})";

die();

}

$inf = new DnFileInf();

$inf->id = $id;

$inf->uid = intval($uid);

$inf->nameLoc = $nameLoc;

$inf->pathLoc = $pathLoc;

$inf->lenSvr = intval($lenSvr);

$inf->sizeSvr = $sizeSvr;

$inf->fdTask = $fdTask == "1";

$db = new DnFile();

$db->Add($inf);

$json = json_encode($inf,JSON_UNESCAPED_SLASHESJSON_UNESCAPED_UNICODE);

$json = urlencode($json);

$json = "$cbk({\"value\":\"".$json."\"})";//返回jsonp格式数据。

echo $json;

?>

勾选多个上传的文件或文件夹,你会发现多了一个下载按钮

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

我设置的是桌面的测试下载目录,设置好点击确定后,继续点击下载按钮,你会发现在页面的右下角出现了下载面板,你选择的文件已出现在目录中,然后点击全部下载,或者单个点击继续

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

下载功能测试成功

其他产品截图:

产品介绍官网:https://dwz.cn/fgXtRtnu

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. Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter

    Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...

  2. 图像处理---《在图片上打印文字 FreeType库》

    图像处理---<在图片上打印文字 FreeType库> 目的:想在处理之后的图像上打印输出结果.方法: (1)只在图像上打印 数字.字母的话:                1.Mat格式 ...

  3. Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements (思维,前缀和)

    Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements time limit per test 1 se ...

  4. Redis入门(一)——安装

    1.下载地址,选择对应版本 https://github.com/dmajkic/redis/downloads 2.下载解压后,进入到文件夹,地址栏cmd,redis-server.exe redi ...

  5. CF732F Tourist Reform[边双缩点]

    题意:给无向图每一条边定向,使得每个点可达点数$R_i$最小值尽可能大,求方案. 条件反射想到二分答案,然后看怎么检验,发现要让所有点$R_i$大于等于某一个值,首先我们关注某些特殊的子图:如果有环的 ...

  6. 区间第K小——可持久化线段树模板

    概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的. 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力. 最 ...

  7. BZOJ 2124 (线段树 + hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2124 题意:给一个1到N的排列{Ai},询问是否存在1<=p1<p2< ...

  8. C# 截取屏幕方法

    this.Visible = false; System.Threading.Thread.Sleep(); Bitmap bit = new Bitmap(Screen.PrimaryScreen. ...

  9. BZOJ 3924 / Luogu P3345 [ZJOI2015]幻想乡战略游戏 (动态点分治/点分树)

    题意 树的结构不变,每个点有点权,每一条边有边权,有修改点权的操作,设xxx为树中一点.求∑idist(x,i)∗a[i]\sum_idist(x,i)*a[i]i∑​dist(x,i)∗a[i]的最 ...

  10. BZOJ 3217: ALOEXT (块状链表套trie)

    第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆- 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直 ...