browner12 / uploader
上传资产到网络服务器
Requires
- php: ^7.2
- illuminate/console: ^6.0|^7.0
- illuminate/support: ^6.0|^7.0
- intervention/image: ~2
- symfony/http-foundation: ~4.0|~5.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0
- scrutinizer/ocular: ~1.1
- squizlabs/php_codesniffer: ~2.3
README
Uploader是一个包,它提供了一个简单的接口,以一致的方式将图像和文档资产上传到您的网站。
安装
通过Composer
$ composer require browner12/uploader
设置
将服务提供者添加到config/app.php
中的providers数组中。
'providers' => [ browner12\uploader\UploaderServiceProvider::class, ];
发布
您可以一次性发布所有内容
php artisan vendor:publish --provider="browner12\uploader\UploaderServiceProvider"
或者您可以单独发布组。
php artisan vendor:publish --provider="browner12\uploader\UploaderServiceProvider" --tag="config"
配置
设置新的uploader.php
配置文件对于上传器按照您期望的方式工作非常重要。文件中对每个选项都有很好的文档,但鉴于它们的整体作用,我们也会在这里讨论它们。
首先,我们有一个base_directory
。这是您所有上传将存储的位置,相对于您的资源根目录(最可能是public
目录)。虽然您可以选择留空此选项,但为所有用户生成的内容创建一个目录的好处是它很容易添加到您的.gitignore
,如果需要,也更容易转移。
'base_directory' => '',
接下来是original_directory
、optimized_directory
和thumbnail_directory
。当您上传图像时,默认情况下,包将自动创建优化和缩略图版本的文件,这可以极大地帮助提高页面加载速度。使用这些选项,您可以设置每个目录的名称。
'original_directory' => 'original', 'optimized_directory' => '', 'thumbnail_directory' => 'thumbnail',
接下来,您可以设置是否在您上传图像时自动创建优化图像和缩略图。默认情况下,它们是开启的,因为这可以帮助极大地减少您的带宽使用量和加载时间。
'create_optimized' => true, 'create_thumbnails' => true,
接下来,您将为每种类型的上传设置默认的扩展名和MIME类型。我们包含了一些合理的默认值。
'document_extensions' => ['pdf', 'doc', 'docx', 'ppt'], 'image_extensions' => ['jpg', 'jpeg', 'gif', 'png'], 'video_extensions' => ['avi', 'mov', 'mp4', 'ogg'], 'audio_extensions' => ['mp3', 'wav'], 'document_mime_types_' => ['application/pdf', 'application/msword'], //other defaults omitted for brevity 'image_mime_types_' => ['image/gif', 'image/jpeg', 'image/png'], 'video_mime_types_' => ['video/avi', 'video/quicktime', 'video/mp4', 'video/ogg'], 'audio_mime_types_' => [ 'audio/mpeg', 'audio/mpeg3', 'audio/wav'],
最大上传大小是您将接受的最大的上传文件大小(以字节为单位)。请记住,如果此值大于您的服务器最大上传大小,可能会导致错误。
'maximum_upload_size' => 32000000,
当您上传图像并创建优化图像时,有两个属性会影响优化图像。首先,您可以设置新图像的质量为1到100之间的值。您还可以设置优化图像的最大宽度。这也有助于保持文件大小,因为仅仅改变一个非常大的图像的质量,仍然会导致非常大的文件大小。如果您不想限制宽度,请将值设置为0。
'optimized_image_quality' => 60, 'optimized_maximum_width' => 1000,
最后,您可以设置生成的缩略图的宽度。
'thumbnail_width' => 100,
使用方法
首先手动实例化上传器
$uploader = new Uploader();
或使用依赖注入。
public function __construct(UploaderInterface $uploader) { $this->uploader = $uploader; }
上传器有四个主要方法,每个方法用于上传不同类型的文件。
$this->uploader->document($file, $path, $filename); $this->uploader->image($file, $path, $filename); $this->uploader->video($file, $path, $filename); $this->uploader->audio($file, $path, $filename);
需要注意的一个重要事项是$file
必须是\Symfony\Component\HttpFoundation\File\UploadedFile
的实例。如果您使用Laravel,所有文件都将自动作为此对象传递。您传递的$path
将相对于您在配置中定义的base_directory
。如果您省略了$filename
,将使用文件的原始名称。请注意,如果选择此选项,同名文件将被覆盖。请注意,不规则的文件名可能会导致意外问题。我们可能会在包的下一个版本中解决这个问题。
让我们看看如何在Laravel控制器中使用上传器的示例。
public function store(Request $request) { try{ if($request->hasFile('image')){ $file = $this->uploader->image($request->file('image'), 'dogs', 1); } } catch(browner12\uploader\UploaderException $e){ //handle any errors here } var_dump($file); }
注意上传器也会向您返回信息。$file
将是一个包含类似以下信息的数组
array(9) { ["id"] => string(7) "1.jpg" ["name"] => string(11) "1.jpg" ["size"] => int(97065) ["mime_type"] => string(10) "image/jpeg" ["extension"] => string(3) "jpg" ["original_name"] => string(7) "1.jpg" ["url"] => string(34) "content/image/original/1.jpg" ["optimized_url"] => string(14) "content/image/1.jpg" ["thumbnail_url"] => string(24) "content/image/thumbnail/1.jpg" }
默认情况下,图像上传器将为您的文件创建优化和缩略图版本。原始文件、优化文件和缩略图版本将放置在您的配置中指定的目录中。创建这些额外文件的原因是为了尽可能帮助优化带宽使用。例如,如果用户上传了一个25MB的图像文件,您可能不希望在每次请求时都显示该图像。相反,您可以显示优化后的文件,它的文件大小可能会小得多。如果您只需要图像的小版本,请请求缩略图。它可能具有更小的文件大小。使用优化和缩略图图像将大大帮助您提高加载时间和性能。如果您不希望创建这些额外文件,您可以更新您的配置以关闭它们。
虽然大多数时候您只需使用默认配置,但有时您可能希望仅仅为了单个上传而更改一个值。这个包有设置器可以让您做到这一点。它们应该在您上传文件之前调用。
$this->uploader->setDirectory('base', 'newBaseDirectory'); $this->uploader->setDirectory('original', 'newOriginalDirectory'); $this->uploader->setDirectory('optimized', 'newOptimizedDirectory'); $this->uploader->setDirectory('thumbnail', 'newThumbnailDirectory'); $this->uploader->setCreateOptimized(false); $this->uploader->setCreateThumbnails(false); $this->uploader->setValidExtensions('image', ['jpg']); $this->uploader->setValidMimeTypes('image', ['image/jpeg']); $this->uploader->setMaximumUploadSize(10000000); $this->uploader->setOptimizedImageQuality(60); $this->uploader->setOptimizedMaximumWidth(500); $this->uploader->setThumbnailWidth(200);
有时您可能需要“重新处理”您已上传的图像。您可以选择在图像最初上传时跳过优化和创建缩略图,而是在指定的时间一次性完成所有操作。您也可能改变配置值的主意。例如,您可以从80的优化图像质量开始,然后决定将其降低到60。《Uploader》提供了一个方便的《reprocess》方法供您使用。只需传递您希望处理的文件的路径,以及一个可选参数以强制覆盖现有文件。
$this->uploader->reprocess('dogs', true);
这可以在代码中手动调用,但还有一个方便的命令可供您调度。第一个参数是您希望处理的路径的逗号分隔值。您还可以传递一个可选的《overwrite》标志。
php artisan uploader:reprocess dogs,cats --overwrite
事件
此包触发以下事件
- FileOptimized
- FilesReprocessed
- FileThumbnailed
- FileUploaded
您可以使用这些事件来挂钩到操作,并执行类似发送通知的事情。
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
安全
如果您发现任何安全相关的问题,请通过电子邮件browner12@gmail.com报告,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。