PHPackages                             lys/php-shard-upload - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. lys/php-shard-upload

ActiveLibrary[File &amp; Storage](/categories/file-storage)

lys/php-shard-upload
====================

前端Javascript+Html5+后端PHP分块上传文件，PHP分块上传大文件

v4.4.3(4y ago)1633411Apache-2.0PHPPHP &gt;=5.6

Since Jul 1Pushed 4y ago1 watchersCompare

[ Source](https://github.com/1107012776/php-shard-upload)[ Packagist](https://packagist.org/packages/lys/php-shard-upload)[ Docs](https://github.com/1107012776/php-shard-upload)[ RSS](/packages/lys-php-shard-upload/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (4)Dependencies (1)Versions (7)Used By (1)

php-shard-upload
================

[](#php-shard-upload)

###### 前端Javascript+Html5+后端PHP分块上传文件，PHP分块上传大文件，该项目可以正常运行，入口为index.html，需要正确配置fileDir的读写权限

[](#前端javascripthtml5后端php分块上传文件php分块上传大文件该项目可以正常运行入口为indexhtml需要正确配置filedir的读写权限)

###### 目前有测试过上传1.5G左右的没有问题（未测试更大的文件），理论上更大的文件也是可以的，（更大的）原理是一样的

[](#目前有测试过上传15g左右的没有问题未测试更大的文件理论上更大的文件也是可以的更大的原理是一样的)

### 安装

[](#安装)

composer require lys/php-shard-upload

### 注意

[](#注意)

该包必须通过composer2+ 安装 您可以使用composer self-update --2迁移到它。如果遇到问题，您可以随时使用 返回composer self-update --1

### 环境

[](#环境)

必须配置上传允许数据流大于2M 在php.ini里面或者nginx里面配置

1.实现断点续传，已上传过的块，前端直接过滤掉，无需继续传到后端，加速上传效率，减少带宽

2.实现快速上传，即之前上传过，该文件已经存在的，很快就能上传成功，其原理就是文件md5+文件sha1的判断

### 示例 （具体请查看tests目录）

[](#示例-具体请查看tests目录)

##### 1. 创建一个 html5 页面

[](#1-创建一个-html5-页面)

```
>

    HTML5大文件分片上传示例

        /**
         * 上传文件类
         * @constructor
         */
        function fileUploadClass() {
            this.shardSize = 2 * 1024 * 1024;  //分块大小size
            this.name = '';  //文件名称
            this.size = 0;  //总大小
            this.md5Hash = '';  //文件md5Hash
            this.sha1Hash = '';  //文件sha1Hash
            this.file = null;  //文件
            this.shardCount = 0;  //总片数
            this.succeed = 0;  //上传个数
            this.uploadSuccess = false;
            this.shardList = []; //已上传分块列表
            this.uploadIndex = 0;
        }

        fileUploadClass.prototype = {
            constructor: fileUploadClass,
            shardInit: function (file) {
                this.file = file;   //文件名
                this.name = file.name;   //文件名
                this.size = file.size;       //总大小
                this.shardCount = Math.ceil(this.size / this.shardSize);  //总片数
            },
            uploadTo: function (file, md5Hash, sha1Hash) {
                this.upload(file, md5Hash, sha1Hash, 10);
            },
            upload: function (file, md5Hash, sha1Hash, batchUploadCount) {
                var bitchCountRecord = batchUploadCount;
                var shardSize = this.shardSize;   //以2MB为一个分片
                var name = this.name;   //文件名
                var size = this.size;       //总大小
                var shardCount = this.shardCount;  //总片数
                for (var i = this.uploadIndex; i = this.shardCount) {
                        console.log('遍历完全部的块了');
                        return;
                    }
                    if (this.uploadSuccess) {
                        console.log('上传成功');
                        return;
                    }
                    if (this.shardList.length > 0 && this.shardList.indexOf(i + 1) > 0) {
                        this.succeed++;
                        $("#output").text(this.succeed + " / " + shardCount);
                        batchUploadCount--;
                        if (batchUploadCount

上传

等待

```

##### 2.创建一个 upload.php 文件

[](#2创建一个-uploadphp-文件)

```
