khanzadimahdi / uploadmanager
简单的上传管理器
Requires
- ext-fileinfo: *
Requires (Dev)
- phpunit/phpunit: ~5.7
This package is auto-updated.
Last update: 2024-09-04 18:42:19 UTC
README
描述
文件上传管理器可以用于上传块文件和非块文件。
上传可以在稍后继续(参见 "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" 目录中
可用验证
- 扩展名
- MimeType
- 大小
示例
//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" 接口创建自定义验证。
回调
这里我们有以下回调
-
beforeValidate
-
afterValidate
-
beforeUpload
-
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" 中的连接配置
要求
要求
- PHP v. 5.6+
- FileInfo 扩展:用于识别文件的 mimeType。
可选要求
- Json 扩展:用于在客户端使用返回的 json 消息。
贡献
在提交拉取请求之前,请阅读 贡献指南。
支持
此项目正在积极维护,但没有官方支持渠道。
许可证
在MIT许可证下发布。