viraj / hawkeye
一个用于在嵌套的md5散列命名文件夹结构中自动上传文件的包。为Laravel提供优化的文件存储的迷你CDN。
Requires
- php: >=5.4.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 4.3.*
This package is auto-updated.
Last update: 2022-02-01 12:45:34 UTC
README
一个用于在嵌套的md5散列命名文件夹结构中自动上传文件的Laravel包。为Laravel提供优化的文件存储的迷你CDN。
目标
通常,我们将文件上传到特定的文件夹中。在小应用中,这是完全可以的,但在大型应用中,一个文件夹中有成千上万的文件会影响性能。Hawkeye旨在解决这个问题。Hawkeye检索上传的文件,创建一个唯一的ID,并使用md5对ID进行散列。散列的文件用于创建文件的嵌套文件夹结构。
md5 hash of uploaded file => c4ca4238a0b923820dcc509a6f75849b.jpg
上述散列名称将用于创建目录
c4c/a42/38a/0b9/238/20d/cc5/09a/6f7/584/c4ca4238a0b923820dcc509a6f75849b.jpg
安装
为了安装Hawkeye,只需将以下内容添加到您的composer.json中。
"viraj/hawkeye": "dev-master"
然后运行 composer install
或 composer update
。
然后在您的 config/app.php
中添加
'Viraj\Hawkeye\HawkeyeServiceProvider',
到提供者数组中,并
'Hawkeye' => 'Viraj\Hawkeye\HawkeyeFacade',
到别名数组中。
创建迁移
现在生成Hawkeye迁移
php artisan hawkeye:migration
它将生成 <timestamp>_hawkeye_setup_tables.php
迁移。您现在可以使用 artisan migrate 命令运行它
php artisan migrate
迁移后,将出现一个新表
hawkeye
— 存储文件记录及其元数据
配置
您需要发布此包的配置,以进一步自定义文件的存储路径。只需使用 php artisan vendor:publish
,然后在您的 app/config
目录中创建一个 hawkeye.php
文件。
配置文件
一个典型的 Hawkeye
配置文件应该如下所示
<?php return [ 'hawkeye_base_path' => 'images/', 'images' => [ 'banner' => '1200x800', 'thumbnail' => '300x200', 'large' => '600x500', ], ];
基本目录配置
在 config/hawkeye.php
中设置基本目录,您的文件将存储在此处。
'hawkeye_base_path' => 'path/to/directory',
例如,如果您想将文件存储在 public/images
目录中,则
'hawkeye_base_path' => 'images/',
注意:不要忘记在 images
后面添加正斜杠
或者,如果您想在外部存储目录中存储它们,例如在 storage/images
中,则给出目录路径
'hawkeye_base_path' => '../storage/images/',
Hawkeye 将将文件存储在适当的目录中。
图像缩放配置
您可以配置Hawkeye以按您所需的各种尺寸缩放上传的图像。它包含一些默认图像尺寸,用于根据行业标准缩放图像,但您可以自由配置以满足您的需求。如果您需要一些不同的值,请相应地编辑 config/hawkeye.php
中的值
'images' => [
'banner' => '1200x800',
'thumbnail' => '300x200',
'large' => '600x500',
],
如果您想保留上述配置并添加一些针对您应用的定制配置,您也可以这样做。只需添加您配置所需的维度和名称。
'images' => [
'banner' => '1200x800',
'thumbnail' => '300x200',
'large' => '600x500',
'your-configuration' => '800x600',
],
使用Hawkeye上传文件
upload.blade.php
<form open="hawkeye" method="POST" enctype="multipart/form-data"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> /* You can have multiple file upload or single file. Hawkeye will handle it out of the box for you. */ <input type="file" name="file_upload[]" multiple> OR <input type="file" name="file_upload"> <input type="submit" value="Upload"> </form>
FileController.php
上传和调整文件大小
在您的控制器中,您可以编写以下代码
<?php use Viraj\Hawkeye\HawkeyeFacade as Hawkeye; public function uploadFile() { $files = Hawkeye::upload('file_upload')->resize()->get(); var_dump($files); }
上述代码将上传、调整大小(配置中指定的所有图像类型)并为您提供嵌套的文件名数组(MD5散列名称)
array (size=2) 'list' => array (size=8) 0 => string 'd67d8ab4f4c10bf22aa353e27879133c.png' (length=36) 1 => string 'd645920e395fedad7bbbed0eca3fe2e0.png' (length=36) 2 => string 'd67d8ab4f4c10bf22aa353e27879133c_1200_800.png' (length=45) 3 => string 'd67d8ab4f4c10bf22aa353e27879133c_300_200.png' (length=44) 4 => string 'd67d8ab4f4c10bf22aa353e27879133c_600_500.png' (length=44) 5 => string 'd645920e395fedad7bbbed0eca3fe2e0_1200_800.png' (length=45) 6 => string 'd645920e395fedad7bbbed0eca3fe2e0_300_200.png' (length=44) 7 => string 'd645920e395fedad7bbbed0eca3fe2e0_600_500.png' (length=44) 'separated' => array (size=2) 0 => array (size=4) 'original' => string 'd67d8ab4f4c10bf22aa353e27879133c.png' (length=36) 'banner' => string 'd67d8ab4f4c10bf22aa353e27879133c_1200_800.png' (length=45) 'thumbnail' => string 'd67d8ab4f4c10bf22aa353e27879133c_300_200.png' (length=44) 'large' => string 'd67d8ab4f4c10bf22aa353e27879133c_600_500.png' (length=44) 1 => array (size=4) 'original' => string 'd645920e395fedad7bbbed0eca3fe2e0.png' (length=36) 'banner' => string 'd645920e395fedad7bbbed0eca3fe2e0_1200_800.png' (length=45) 'thumbnail' => string 'd645920e395fedad7bbbed0eca3fe2e0_300_200.png' (length=44) 'large' => string 'd645920e395fedad7bbbed0eca3fe2e0_600_500.png' (length=44)
上述响应包含2个参数
list
- 它包含已上传和调整大小的所有文件列表。
separated
- 它包含已上传文件和调整大小的图像的分离列表,如果有的话!
getList()
如果您只想获取所有已上传和调整大小的文件列表,而不包含图像类型的数据,您可以像以下这样使用getList()
方法
<?php use Viraj\Hawkeye\HawkeyeFacade as Hawkeye; public function uploadFile() { $files = Hawkeye::upload('file_upload')->resize()->getList(); var_dump($files); }
以下是
array (size=8) 0 => string 'd67d8ab4f4c10bf22aa353e27879133c.png' (length=36) 1 => string 'd645920e395fedad7bbbed0eca3fe2e0.png' (length=36) 2 => string 'd67d8ab4f4c10bf22aa353e27879133c_1200_800.png' (length=45) 3 => string 'd67d8ab4f4c10bf22aa353e27879133c_300_200.png' (length=44) 4 => string 'd67d8ab4f4c10bf22aa353e27879133c_600_500.png' (length=44) 5 => string 'd645920e395fedad7bbbed0eca3fe2e0_1200_800.png' (length=45) 6 => string 'd645920e395fedad7bbbed0eca3fe2e0_300_200.png' (length=44) 7 => string 'd645920e395fedad7bbbed0eca3fe2e0_600_500.png' (length=44)
针对特定图像类型的调整大小
有时,您可能不想将图像调整为配置中指定的所有类型。不用担心,Hawkeye也为此提供了相应的功能。在resize()
方法中指定您想要上传的图像调整大小的图像类型
名称,Hawkeye将只将这些类型进行调整。
<?php use Viraj\Hawkeye\HawkeyeFacade as Hawkeye; public function uploadFile() { $files = Hawkeye::upload('file_upload')->resize(['banner', 'large'])->get(); var_dump($files); }
上述代码将只将您的图像调整大小为2种类型 - banner
和large
。响应将是
array (size=2) 'list' => array (size=6) 0 => string 'a5bfc9e07964f8dddeb95fc584cd965d.png' (length=36) 1 => string 'a5771bce93e200c36f7cd9dfd0e5deaa.png' (length=36) 2 => string 'a5bfc9e07964f8dddeb95fc584cd965d_1200_800.png' (length=45) 3 => string 'a5bfc9e07964f8dddeb95fc584cd965d_600_500.png' (length=44) 4 => string 'a5771bce93e200c36f7cd9dfd0e5deaa_1200_800.png' (length=45) 5 => string 'a5771bce93e200c36f7cd9dfd0e5deaa_600_500.png' (length=44) 'separated' => array (size=2) 0 => array (size=3) 'original' => string 'a5bfc9e07964f8dddeb95fc584cd965d.png' (length=36) 'banner' => string 'a5bfc9e07964f8dddeb95fc584cd965d_1200_800.png' (length=45) 'large' => string 'a5bfc9e07964f8dddeb95fc584cd965d_600_500.png' (length=44) 1 => array (size=3) 'original' => string 'a5771bce93e200c36f7cd9dfd0e5deaa.png' (length=36) 'banner' => string 'a5771bce93e200c36f7cd9dfd0e5deaa_1200_800.png' (length=45) 'large' => string 'a5771bce93e200c36f7cd9dfd0e5deaa_600_500.png' (length=44)
generateFullImagePathFor()
此函数返回特定文件名(带扩展名的散列)的完整图像路径。
示例1(调整大小的图像 - 名称中附加了尺寸)
Hawkeye::generateFullImagePathFor('45c48cce2e2d7fbdea1afc51c7c6ad26_1200_200.jpg')
Output:
"images/45c/48c/ce2/e2d/7fb/dea/1af/c51/c7c/6ad/45c48cce2e2d7fbdea1afc51c7c6ad26_1200_200.jpg"
示例2(原始图像 - 具有原始名称)
Hawkeye::generateFullImagePathFor('45c48cce2e2d7fbdea1afc51c7c6ad26.jpg')
Output:
"images/45c/48c/ce2/e2d/7fb/dea/1af/c51/c7c/6ad/45c48cce2e2d7fbdea1afc51c7c6ad26.jpg"
许可证
Hawkeye是免费软件,在MIT许可证的条款下分发