用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个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. 一图一知-TS之泛型

  2. DiskFileItemFactory用法

    在使用servlet上传文件时,使用DiskFileItemFactory(在使用struts时利用InputStream和OutputStream) 将请求消息实体中的每一个项目封装成单独的Disk ...

  3. Linux命令之tree(目录树结构)

    tree命令 官方下载地址:http://mama.indstate.edu/users/ice/tree/,右键复制如下图地址: 下载: 执行wget  http://mama.indstate.e ...

  4. CF666E Forensic Examination——SAM+线段树合并+倍增

    RemoteJudge 题目大意 给你一个串\(S\)以及一个字符串数组\(T[1...m]\),\(q\)次询问,每次问\(S\)的子串\(S[p_l...p_r]\)在\(T[l...r]\)中的 ...

  5. 一个列表实现__iter__和__next__方法的例子

    x = ['厉智','陈培昌','程劲','徐晓冬'].__iter__() #这非得这么写不可,否则无法调用下面的__next__()方法,切记! print(x.__next__()) print ...

  6. [Nx] Note for learning Nx

    Proxy configuration: When we have already fews applications running in the workspace, and we want to ...

  7. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  8. Java开发中使用事务

    一.      XML,使用tx标签配置拦截器实现事务 二.      Annotation方式 一.XML,使用tx标签配置拦截器实现事务 中主要配置中是tx:advice和aop:config两个 ...

  9. 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成

    短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...

  10. Linux 删除文件夹和文件的命令(强制删除包括非空文件)

    linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就 ...