biigle/laravel-file-cache

在Laravel中从本地文件系统、云存储或公共Web服务器中检索和缓存文件

v5.0.0 2024-07-12 14:42 UTC

README

在Laravel或Lumen中从本地文件系统、云存储或公共Web服务器中检索和缓存文件。

文件缓存专门设计用于与多个并行队列工作者进行并发处理。

Tests

安装

composer require biigle/laravel-file-cache

Laravel

Laravel会自动发现服务提供者和FileCache外观。

Lumen

将以下内容添加到bootstrap/app.php

$app->register(Biigle\FileCache\FileCacheServiceProvider::class);
$app->register(Illuminate\Filesystem\FilesystemServiceProvider::class);

要使用FileCache外观,启用$app->withFacades()并将以下内容添加到bootstrap/app.php

if (!class_exists(FileCache::class)) {
    class_alias(Biigle\FileCache\Facades\FileCache::class, 'FileCache');
}

不使用外观,文件缓存实例可通过app('file-cache')访问。

用法

查看FileCache合约以了解文件缓存的公共API。示例

use FileCache;
use Biigle\FileCache\GenericFile;

// Implements Biigle\FileCache\Contracts\File.
$file = new GenericFile('https://example.com/images/image.jpg');

FileCache::get($file, function ($file, $path) {
    // do stuff
});

如果文件URL指定了除httphttps以外的协议(例如mydisk://images/image.jpg),文件缓存将在filesystems.disks中配置的相应存储磁盘中查找文件。您不能使用本地文件路径作为URL(例如/vol/images/image.jpg)。相反,配置一个带有local驱动器的存储磁盘。

配置

文件缓存自带合理的默认配置。您可以在file-cache命名空间中或使用环境变量来覆盖它。

file-cache.max_file_size

默认:-1(任何大小)环境:FILE_CACHE_MAX_FILE_SIZE

缓存文件允许的最大大小(以字节为单位)。设置为-1以允许任何大小。

file-cache.max_age

默认:60 环境:FILE_CACHE_MAX_AGE

缓存中文件的最大年龄(以分钟为单位)。较旧的文件将被删除。

file-cache.max_size

默认:1E+9(1 GB)环境:FILE_CACHE_MAX_SIZE

文件缓存的最大大小(软限制)(以字节为单位)。如果缓存超过此大小,则删除旧文件。

file-cache.path

默认:'storage/framework/cache/files'

用于文件缓存的目录。

file-cache.timeout

默认:5.0 环境:FILE_CACHE_TIMEOUT

读取远程文件的读取超时时间(以秒为单位)。如果流在超过此时间段内没有传输数据(或无法建立连接),则缓存文件失败。

file-cache.prune_interval

默认 '*/5 * * * *'(每五分钟)

计划任务删除文件缓存的间隔。

file-cache.mime_types

默认:[](允许所有类型)

允许缓存文件的MIME类型数组。将失败缓存其他类型的文件。

清除

在调用php artisan cache:clear时清除文件缓存。

测试

FileCache外观提供了易于测试的模拟。模拟实际上不会检索和存储任何文件,而只是使用模拟的文件路径执行回调函数。

use FileCache;
use Biigle\FileCache\GenericFile;

FileCache::fake();
$file = new GenericFile('https://example.com/image.jpg');
$path = FileCache::get($file, function ($file, $path) {
    return $path;
});

$this->assertFalse($this->app['files']->exists($path));