PHP上传超大文件解决方案

一提到大文件上传,首先想到的是啥???

 

没错,就是修改php.ini文件里的上传限制,那就是upload_max_filesize。修改成合适参数我们就可以进行愉快的上传文件了。当然啦,这是一般情况下的操作,咱们可以考虑下50M的话,这样修改还好使么???

 

结果不言而喻,如果不信邪的看官可以动手试下。那么这时候我们就要考虑了,为什么会失败呢?通过错误提示或者正常思维来思考的话,我们首先想到的是,这个文件到底有没有被上传到服务器上呢?

 

嘿嘿,到这里我们就应该知道,限制在哪里了。没错就是表单上传的大小受到了限制。这时候我们就要修改php.ini里的post_max_size参数了。

 

到这里呢,在网络正常的情况下,基本上不会出现什么问题了。但是,你懂得,我们作为一名programer,怎么可能对非正常情况没有准备。

 

这时候我们就要修改php运行最大时间max_execution_time还有php接收数据所需的最大时间max_input_time再来就是最大内存memory_limit这三个参数了。修改为适合自己的程序的数值,就可以畅快的运行了。

 

还有万一中的情况,你的大文件上传程序没有成功运行的话,各位不妨考虑下服务器的限制。我用的Nginx,所以我在我的配置文件中修改了client_max_body_size这个参数。这是用来限制客户端上传文件大小的。

 

好啦,到这里呢,大部分情况下的文件上传应该都可以解决了。如果还是有问题的话,各位,请与我私信,大家共同解决。如果感觉不错的话,请多多点赞支持哦。。。

 

这是前端代码:

<body>

    <p>up6多文件上传演示页面</p>

    <p><a target="_blank" href="db/clear.php">清空数据库</a></p>

    <p><a href="filemgr/index.php" target="_blank">文件管理器演示</a></p> 

    <p><a target="_blank" href="index2.php">单面板演示</a></p>

    <p><a href="down2/index.htm" target="_blank">打开下载页面</a></p>

    <p>

        文件路径:<input id="filePath" type="text" size="50" value="D:\360safe-inst.exe" />&nbsp;

        <input id="btnUpF" type="button" value="上传本地文件" />

    </p>

    <p>

        目录路径:<input id="folderPath" type="text" size="50" value="C:\Users\Administrator\Desktop\test" />&nbsp;

        <input id="btnUpFd" type="button" value="上传本地目录" />

    </p>

    <div id="FilePanel"></div>

 

 

这是后台部分代码和截图:

文件上传完毕,f_complete.

文件初始化,f_create

文件块处理,f_post

文件夹上传完毕,fd_complete

文件夹初始化,fd_create

 

us

 

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 databaseDbHelper;

use databaseDBFile;

use databaseDBFolder;

 

$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());

?>

 

文件和文件夹批量上传

说明: http://bbsres2.ncmem.com/202d5f59.png

 

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

 

上传成功后打开我们的存储文件夹查看,发现自动生成了几个文件夹,打开文件夹确认上传文件成功

 

文件及文件夹批量下载

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

 

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

设置完成后继续点击下载按钮,页面的右下角出现了下载面板,你选择的文件已出现在目录中,然后点击全部下载,或者单个点击继续,自动加载未上传完的任务。在刷新浏览器或重启电脑后任然可以自动加载未完成的任务

 

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

 

 

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

原文地址:https://www.cnblogs.com/xproer/p/10937050.html