use League\Glide\Server;
use League\Glide\ServerFactory;
use League\Glide\Signatures\SignatureFactory;
use League\Glide\Urls\UrlBuilderFactory;
use Symfony\Component\OptionsResolver\OptionsResolver;
use think\Container;
use think\facade\App;
use think\Request;
use think\Response;
class GlideMiddleware
{
/**
@var array
*/
protected $options;
/**
@var array
*/
protected $query;
public function __construct(array $options = [])
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'baseUrl' => '/images',
'cache' => App::getRuntimePath() . '/glide',
'cacheTime' => '+1 day',
'signKey' => false,
'glide' => [],
'onException' => function (\Exception $exception, Request $request, Server $server) {
throw $exception;
},
]);
$resolver->setRequired('source');
修改文件:GlideMiddleware.php `<?php
namespace Slince\Glide;
use League\Glide\Server; use League\Glide\ServerFactory; use League\Glide\Signatures\SignatureFactory; use League\Glide\Urls\UrlBuilderFactory; use Symfony\Component\OptionsResolver\OptionsResolver; use think\Container; use think\facade\App; use think\Request; use think\Response;
class GlideMiddleware { /**
@var array */ protected $options;
/**
@var array */ protected $query;
public function __construct(array $options = []) { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'baseUrl' => '/images', 'cache' => App::getRuntimePath() . '/glide', 'cacheTime' => '+1 day', 'signKey' => false, 'glide' => [], 'onException' => function (\Exception $exception, Request $request, Server $server) { throw $exception; }, ]); $resolver->setRequired('source');
}
public function __invoke(Request $request, $next) { $uri = urldecode($request->pathinfo()); parse_str($request->query(), $this->query); if (!preg_match("#^{$this->options['baseUrl']}#", '/' . $uri)) { return $next($request); }
}
/**
@throws \League\Glide\Filesystem\FileNotFoundException */ protected function handleRequest(Server $server, Request $request) { //检查是否重新更新了 $modifiedTime = null; if ($this->options['cacheTime']) { $modifiedTime = $server->getSource() ->getTimestamp($server->getSourcePath($request->pathinfo()));
}
protected function applyCacheHeaders(Response $response, $modifiedTime) { $expire = strtotime($this->options['cacheTime']); $maxAge = $expire - time();
}
/**
@return false|Response */ protected function applyModified($modifiedTime, Request $request) { //如果没有修改直接返回 if ($this->isNotModified($request, $modifiedTime)) { $response = Response::create('', 'html', '304'); return $this->applyCacheHeaders($response, $modifiedTime); }
}
/**
@return bool */ protected function isNotModified(Request $request, $modifiedTime) { $modifiedSince = $request->header('If-Modified-Since');
}
/**
@throws \League\Glide\Signatures\SignatureException */ protected function checkSignature($uri) { if (!$this->options['signKey']) { return; } SignatureFactory::create($this->options['signKey'])->validateRequest( $uri, $this->query ); }
/**
@return \League\Glide\Server */ protected function createGlideServer() { return ServerFactory::create(array_merge([ 'source' => $this->options['source'], 'cache' => $this->options['cache'], 'base_url' => $this->options['baseUrl'], ], $this->options['glide'])); }
/**
@return \Closure */ public static function factory($options) { $middleware = new self($options);
} } `
修改文件: ResponseFactory.php
`<?php
namespace Slince\Glide;
use League\Flysystem\FilesystemInterface; use League\Glide\Responses\ResponseFactoryInterface; use think\Response;
class ResponseFactory implements ResponseFactoryInterface { /**
@throws \League\Flysystem\FileNotFoundException */ public function create(FilesystemInterface $cache, $path) { $contentType = $cache->getMimetype($path); $contentLength = $cache->getSize($path);
} } `
完美解决。