delight-im/file-upload
Composer 安装命令:
composer require delight-im/file-upload
包简介
Simple and convenient file uploads — secure by default
README 文档
README
Simple and convenient file uploads — secure by default
Requirements
- PHP 5.6.0+
Installation
-
Include the library via Composer [?]:
$ composer require delight-im/file-upload -
Include the Composer autoloader:
require __DIR__ . '/vendor/autoload.php';
-
Set up your HTML form for the file upload, e.g.:
<form action="" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="1048576"> <input type="file" name="my-input-name"> <button type="submit">Upload</button> </form>
The two attributes
method="post"andenctype="multipart/form-data"on the<form>element are mandatory. Likewise, there must be at least one<input type="file">element with a propernameattribute. Finally, some way to submit the form, e.g. the<button type="submit">element, is required. The hidden input namedMAX_FILE_SIZEis an optional hint for the client.
Usage
File uploads
$upload = new \Delight\FileUpload\FileUpload(); $upload->withTargetDirectory('/my-app/users/' . $userId . '/avatars'); $upload->from('my-input-name'); try { $uploadedFile = $upload->save(); // success // $uploadedFile->getFilenameWithExtension() // $uploadedFile->getFilename() // $uploadedFile->getExtension() // $uploadedFile->getDirectory() // $uploadedFile->getPath() // $uploadedFile->getCanonicalPath() } catch (\Delight\FileUpload\Throwable\InputNotFoundException $e) { // input not found } catch (\Delight\FileUpload\Throwable\InvalidFilenameException $e) { // invalid filename } catch (\Delight\FileUpload\Throwable\InvalidExtensionException $e) { // invalid extension } catch (\Delight\FileUpload\Throwable\FileTooLargeException $e) { // file too large } catch (\Delight\FileUpload\Throwable\UploadCancelledException $e) { // upload cancelled }
Limiting the maximum permitted file size
$upload->withMaximumSizeInBytes(4194304); // or $upload->withMaximumSizeInKilobytes(4096); // or $upload->withMaximumSizeInMegabytes(4);
Reading the maximum permitted file size
// e.g. int(4194304) $upload->getMaximumSizeInBytes(); // or // e.g. int(4096) $upload->getMaximumSizeInKilobytes(); // or // e.g. int(4) $upload->getMaximumSizeInMegabytes();
Restricting the allowed file types or extensions
$upload->withAllowedExtensions([ 'jpeg', 'jpg', 'png', 'gif' ]);
Note: By default, a set of filename extensions is used that is relatively safe for PHP applications and common on the web. This may be sufficient for some use cases.
Reading the allowed file types or extensions
// e.g. array(4) { [0]=> string(4) "jpeg" [1]=> string(3) "jpg" [2]=> string(3) "png" [3]=> string(3) "gif" } $upload->getAllowedExtensionsAsArray(); // or // e.g. string(16) "jpeg,jpg,png,gif" $upload->getAllowedExtensionsAsMachineString(); // or // e.g. string(19) "JPEG, JPG, PNG, GIF" $upload->getAllowedExtensionsAsHumanString(); // or // e.g. string(21) "JPEG, JPG, PNG or GIF" $upload->getAllowedExtensionsAsHumanString(' or ');
Reading the target directory
// e.g. string(24) "/my-app/users/42/avatars" $upload->getTargetDirectory();
Defining the target filename
$upload->withTargetFilename('my-picture');
Note: By default, a random filename will be used, which is sufficient (and desired) in many cases.
Reading the target filename
// e.g. string(10) "my-picture" $upload->getTargetFilename();
Reading the name of the input field
// e.g. string(13) "my-input-name" $upload->getSourceInputName();
Base64 uploads
$upload = new \Delight\FileUpload\Base64Upload(); $upload->withTargetDirectory('/my-app/users/' . $userId . '/avatars'); $upload->withData($_POST['my-base64']); try { $uploadedFile = $upload->save(); // success // $uploadedFile->getFilenameWithExtension() // $uploadedFile->getFilename() // $uploadedFile->getExtension() // $uploadedFile->getDirectory() // $uploadedFile->getPath() // $uploadedFile->getCanonicalPath() } catch (\Delight\FileUpload\Throwable\InputNotFoundException $e) { // input not found } catch (\Delight\FileUpload\Throwable\InvalidFilenameException $e) { // invalid filename } catch (\Delight\FileUpload\Throwable\InvalidExtensionException $e) { // invalid extension } catch (\Delight\FileUpload\Throwable\FileTooLargeException $e) { // file too large } catch (\Delight\FileUpload\Throwable\UploadCancelledException $e) { // upload cancelled }
Limiting the maximum permitted file size
$upload->withMaximumSizeInBytes(4194304); // or $upload->withMaximumSizeInKilobytes(4096); // or $upload->withMaximumSizeInMegabytes(4);
Reading the maximum permitted file size
// e.g. int(4194304) $upload->getMaximumSizeInBytes(); // or // e.g. int(4096) $upload->getMaximumSizeInKilobytes(); // or // e.g. int(4) $upload->getMaximumSizeInMegabytes();
Defining the filename extension
$upload->withFilenameExtension('png');
Note: This defines the filename extension of the file to be uploaded, which is a property of the FileUpload instance. It does not change the extension of any file already uploaded, which would be represented in a File instance. By default, the filename extension bin for arbitrary (binary) data will be used, which may be sufficient in some cases.
Reading the filename extension
// e.g. string(3) "png" $upload->getFilenameExtension();
Note: This retrieves the filename extension of the file to be uploaded, which is a property of the FileUpload instance. It does not read the extension of any file already uploaded, which would be represented in a File instance.
Reading the target directory
// e.g. string(24) "/my-app/users/42/avatars" $upload->getTargetDirectory();
Defining the target filename
$upload->withTargetFilename('my-picture');
Note: By default, a random filename will be used, which is sufficient (and desired) in many cases.
Reading the target filename
// e.g. string(10) "my-picture" $upload->getTargetFilename();
Reading the Base64 data
// e.g. string(20) "SGVsbG8sIFdvcmxkIQ==" $upload->getData();
Data URI uploads
$upload = new \Delight\FileUpload\DataUriUpload(); $upload->withTargetDirectory('/my-app/users/' . $userId . '/avatars'); $upload->withUri($_POST['my-data-uri']); try { $uploadedFile = $upload->save(); // success // $uploadedFile->getFilenameWithExtension() // $uploadedFile->getFilename() // $uploadedFile->getExtension() // $uploadedFile->getDirectory() // $uploadedFile->getPath() // $uploadedFile->getCanonicalPath() } catch (\Delight\FileUpload\Throwable\InputNotFoundException $e) { // input not found } catch (\Delight\FileUpload\Throwable\InvalidFilenameException $e) { // invalid filename } catch (\Delight\FileUpload\Throwable\InvalidExtensionException $e) { // invalid extension } catch (\Delight\FileUpload\Throwable\FileTooLargeException $e) { // file too large } catch (\Delight\FileUpload\Throwable\UploadCancelledException $e) { // upload cancelled }
Limiting the maximum permitted file size
$upload->withMaximumSizeInBytes(4194304); // or $upload->withMaximumSizeInKilobytes(4096); // or $upload->withMaximumSizeInMegabytes(4);
Reading the maximum permitted file size
// e.g. int(4194304) $upload->getMaximumSizeInBytes(); // or // e.g. int(4096) $upload->getMaximumSizeInKilobytes(); // or // e.g. int(4) $upload->getMaximumSizeInMegabytes();
Restricting the allowed MIME types and extensions
$upload->withAllowedMimeTypesAndExtensions([ 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif' ]);
Note: By default, a set of MIME types is used that is relatively safe for PHP applications and common on the web. This may be sufficient for some use cases.
Reading the allowed MIME types and extensions
// e.g. array(3) { [0]=> string(10) "image/jpeg" [1]=> string(9) "image/png" [2]=> string(9) "image/gif" } $upload->getAllowedMimeTypesAsArray(); // or // e.g. string(30) "image/jpeg,image/png,image/gif" $upload->getAllowedMimeTypesAsMachineString(); // or // e.g. string(32) "image/jpeg, image/png, image/gif" $upload->getAllowedMimeTypesAsHumanString(); // or // e.g. string(34) "image/jpeg, image/png or image/gif" $upload->getAllowedMimeTypesAsHumanString(' or '); // or // e.g. array(3) { [0]=> string(3) "jpg" [1]=> string(3) "png" [2]=> string(3) "gif" } $upload->getAllowedExtensionsAsArray(); // or // e.g. string(11) "jpg,png,gif" $upload->getAllowedExtensionsAsMachineString(); // or // e.g. string(13) "JPG, PNG, GIF" $upload->getAllowedExtensionsAsHumanString(); // or // e.g. string(15) "JPG, PNG or GIF" $upload->getAllowedExtensionsAsHumanString(' or ');
Reading the target directory
// e.g. string(24) "/my-app/users/42/avatars" $upload->getTargetDirectory();
Defining the target filename
$upload->withTargetFilename('my-picture');
Note: By default, a random filename will be used, which is sufficient (and desired) in many cases.
Reading the target filename
// e.g. string(10) "my-picture" $upload->getTargetFilename();
Reading the data URI
// e.g. string(43) "data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==" $upload->getUri();
Contributing
All contributions are welcome! If you wish to contribute, please create an issue first so that your feature, problem or question can be discussed.
License
This project is licensed under the terms of the MIT License.
delight-im/file-upload 适用场景与选型建议
delight-im/file-upload 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.89k 次下载、GitHub Stars 达 68, 最近一次更新时间为 2017 年 03 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「file」 「form」 「upload」 「validation」 「files」 「input」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 delight-im/file-upload 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 delight-im/file-upload 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 delight-im/file-upload 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
The file manager intended for using Laravel with CKEditor / TinyMCE / Colorbox
Diese Contao 4 Erweiterung stellt Google reCAPTCHA V2 in Form eines neuen Formularfeldes im Formulargenerator bereit. This extension provides Google reCAPTCHA V2 in the form of a new form field in the form generator of Contao Open Source CMS.
A Laravel Filament Forms slug field.
Laravel Media Popup to upload/view the files
A jQuery augmented PHP library for creating and validating HTML forms
PMVC Plugin for File information
统计信息
- 总下载量: 10.89k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 73
- 点击次数: 23
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-03-11