khanzadimahdi/uploadmanager

该包最新版本(v1.0)没有提供许可信息。

简单的上传管理器

v1.0 2018-09-17 18:13 UTC

This package is auto-updated.

Last update: 2024-09-04 18:42:19 UTC


README

screen record

描述

文件上传管理器可以用于上传块文件和非块文件。

上传可以在稍后继续(参见 "resumable-chunk-upload" 示例,位于 "examples/js-example 目录")。

添加您的文件,上传它们,然后关闭浏览器,下次您可以打开浏览器并继续未完成的上传。

功能

  • 多文件上传: 允许一次选择多个文件并同时上传。
  • 可取消上传: 可以取消单个文件上传以停止上传进度。
  • 可恢复上传: 被中断的上传可以在稍后继续。
  • 块上传: 大文件可以分块上传。
  • 可定制和可扩展: 提供了一个接口,用于定义各种上传事件的回调方法。

入门指南

安装

composer require khanzadimahdi/uploadmanager

用法

可用类

  • UploadManager\Chunk : 包含文件(或块)信息。
  • UploadManager\Upload : 存储接收到的文件(或块)。

示例:(简单文件上传)

文件位于 "examples/simple-upload" 目录中

首先,我们创建一个简单的HTML表单

<form method="post" action="<?= htmlentities($_SERVER['PHP_SELF']) ?>" enctype="multipart/form-data">
    <label for="media">select file to upload:</label>
    <input id="media" name="media" type="file">
    <input type="submit" value="upload files">
</form>

然后,我们使用以下代码存储文件(或文件)

if($_SERVER['REQUEST_METHOD']=='POST'){
    $uploadManager=new \UploadManager\Upload('media');
    $chunks=$uploadManager->upload('uploads');
    if(!empty($chunks)){
        foreach($chunks as $chunk){
            echo '<p class="success">'.$chunk->getNameWithExtension().' has been uploaded successfully</p>';
        }
    }
}

如果上传的文件有错误或无法上传,则 "upload" 方法会抛出异常,因此最好在 try catch 块中调用此方法。

try{
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $uploadManager=new \UploadManager\Upload('media');
        $chunks=$uploadManager->upload('uploads');
        if(!empty($chunks)){
            foreach($chunks as $chunk){
                echo '<p class="success">'.$chunk->getNameWithExtension().' has been uploaded successfully</p>';
            }
        }
    }
}catch(\UploadManager\Exceptions\Upload $exception){
    //if file exists: (user selects a file)
    if(!empty($exception->getChunk())){
        foreach($exception->getChunk()->getErrors() as $error){
            echo '<p class="error">'.$error.'</p>';
        }
    }else{
        echo '<p class="error">'.$exception->getMessage().'</p>';
    }
}

每个文件(或块)相关的错误可以通过 "getErrors" 方法作为一个数组检索。

验证

我们可以在存储之前验证文件(或块)。

一个简单的验证示例位于 "examples/using-validations" 目录中

可用验证

  1. 扩展名
  2. MimeType
  3. 大小

示例

//add validations
$uploadManager->addValidations([
    new \UploadManager\Validations\Size('2M'), //maximum file size is 2M
    new \UploadManager\Validations\Extension(['jpg','jpeg','png','gif']),
]);

如你所见,我们可以使用 "addValidations" 方法添加一个验证数组。

您可以使用可用的验证或通过实现 "UploadManager\Contracts\ValidationInterface" 接口创建自定义验证。

回调

这里我们有以下回调

  1. beforeValidate

  2. afterValidate

  3. beforeUpload

  4. afterUpload

回调可以用于控制上传机制的流程。

示例

如果发生错误,我们将删除上传的文件(或块)。

文件位于 "examples/simple-callbacks" 目录中

//add callback : remove uploaded chunks on error
$uploadManager->afterValidate(function($chunk){
    $address=($chunk->getSavePath().$chunk->getNameWithExtension());
    if($chunk->hasError() && file_exists($address)){
        //remove current chunk on error
        @unlink($address);
    }
});

更多真实示例

请参阅 "examples/js-examples" 目录以获取更多真实示例。

可用示例

  • Dropzone

  • JQuery 文件上传

  • Plupload

  • Resumable-Chunk-Upload:未来恢复上传的最佳示例!在这个示例中,您需要创建一个数据库并将 "server/medias.sql" 导入其中,然后更改 "server/upload.php" 中的连接配置

要求

要求

可选要求

  • Json 扩展:用于在客户端使用返回的 json 消息。

贡献

在提交拉取请求之前,请阅读 贡献指南

支持

此项目正在积极维护,但没有官方支持渠道。

许可证

MIT许可证下发布。