offline/laravel-local-cache

此包已废弃且不再维护。未建议替代包。

在 Laravel 中本地缓存远程文件

v1.0.8 2016-03-11 15:57 UTC

This package is auto-updated.

Last update: 2022-02-01 12:48:29 UTC


README

[构建状态](https://travis-ci .org/OFFLINE-GmbH/laravel-local-cache)

此包允许您在本地文件系统中缓存远程文件。如果您尝试减少从如 Amazon S3 这样的服务请求文件时的带宽消耗,这很有用。

该实现还允许您从缓存中提供文件,这些文件可能在某些时候在远程位置不可用。

安装它

要安装此包,请将其包含在您的 composer.json 中,并运行 composer update

"require": {
   "offline/laravel-local-cache": "~1.0"
}

将服务提供者添加到您的 config/app.php 中的 provider 数组

'Offline\LocalCache\LocalCacheServiceProvider'

在您的 config/app.php 中为外观添加别名

'LocalCache' => 'Offline\LocalCache\Facades\LocalCache',

发布配置

$ php artisan vendor:publish --provider="Offline\LocalCache\LocalCacheServiceProvider"

创建目录 storage/localcache(在 config/localcache.php 中编辑 storage_path 设置以更改此位置)。

使用它

要缓存文件,请使用 getCachedHtml 方法。文件将被下载并存储到磁盘上。该方法返回文件的本地 URL。

$string = 'http://www.offlinegmbh.ch/file.jpg';
    
// returns http://yoursite/cache/{hash}
var_dump(LocalCache::getCachedHtml($string));

默认情况下,生成一个 /cache/{hash} 路由,该路由以正确的 MIME 类型提供文件的内容。要更改路由,请编辑 config/localcache.php 中的 route 设置。

getCachedHtml 方法与包含任意数量 URL 的任何字符串一起工作。它会相应地提取和替换链接。

$string = '<p>http://www.offlinegmbh.ch/file.jpg</p><p>http://www.offlinegmbh.ch/file2.jpg</p>';
    
// <p>http://yoursite/cache/{hash1}</p><p>http://yoursite/cache/{hash2}</p>
var_dump(LocalCache::getCachedHtml($string));

要防止 URL 被缓存,请使用 @ 符号作为前缀

$string = '<p>@http://dont-cache-me/file.jpg</p>';
// <p>http://dont-cache-me/file.jpg</p>
var_dump(LocalCache::getCachedHtml($string));

示例中间件

此示例中间件缓存模板中引用的所有外部文件,并替换 URL。

<?php

namespace App\Http\Middleware;

use Closure;
use Offline\LocalCache\Facades\LocalCache;

class LocalCacheMiddleware
{

    /**
     * Cache and replace links to external assets.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure                 $next
     *
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $response->setContent(
            LocalCache::getCachedHtml($response->getContent())
        );

        return $response;
    }

}

将其添加到您的 app/Http/Kernel.php

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'localcache'   => \App\Http\Middleware\LocalCacheMiddleware::class,
];

并在您的 routes.php 或控制器中使用它。

Route::get('/', [
    'uses'       => 'PageController@index',
    'middleware' => ['localcache']
]);