mirror of
https://github.com/Intervention/image.git
synced 2025-08-14 01:44:03 +02:00
cachable imagecache route
This commit is contained in:
@@ -73,59 +73,22 @@ class ImageServiceProviderLaravel5 extends ServiceProvider
|
|||||||
'imagecache'
|
'imagecache'
|
||||||
);
|
);
|
||||||
|
|
||||||
$config = $app['config'];
|
// imagecache route
|
||||||
|
if (is_string(config('imagecache.route'))) {
|
||||||
|
|
||||||
// create dynamic manipulation route
|
$filename_pattern = '[ \w\\.\\/\\-]+';
|
||||||
if (is_string($config->get('imagecache.route'))) {
|
|
||||||
|
|
||||||
// add original to route templates
|
// route to access original file
|
||||||
$config->set('imagecache.templates.original', null);
|
$app['router']->get(
|
||||||
|
config('imagecache.route').'/original/{filename}',
|
||||||
|
'Intervention\Image\ImageCacheController@getOriginal'
|
||||||
|
)->where(array('filename' => $filename_pattern));
|
||||||
|
|
||||||
$app['router']->get($config->get('imagecache.route').'/{template}/{filename}', array('as' => 'imagecache', function ($template, $filename) use ($app, $config) {
|
// route to access template applied image file
|
||||||
|
$app['router']->get(
|
||||||
// find file
|
config('imagecache.route').'/{template}/{filename}',
|
||||||
foreach ($config->get('imagecache.paths') as $path) {
|
'Intervention\Image\ImageCacheController@getImage'
|
||||||
// don't allow '..' in filenames
|
)->where(array('filename' => $filename_pattern));
|
||||||
$image_path = $path.'/'.str_replace('..', '', $filename);
|
|
||||||
if (file_exists($image_path) && is_file($image_path)) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
$image_path = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// abort if file not found
|
|
||||||
if ($image_path === false) {
|
|
||||||
$app->abort(404);
|
|
||||||
}
|
|
||||||
|
|
||||||
// define template callback
|
|
||||||
$callback = $config->get("imagecache.templates.{$template}");
|
|
||||||
|
|
||||||
if (is_callable($callback)) {
|
|
||||||
|
|
||||||
// image manipulation based on callback
|
|
||||||
$content = $app['image']->cache(function ($image) use ($image_path, $callback) {
|
|
||||||
return $callback($image->make($image_path));
|
|
||||||
}, $config->get('imagecache.lifetime'));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// get original image file contents
|
|
||||||
$content = file_get_contents($image_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
// define mime type
|
|
||||||
$mime = finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $content);
|
|
||||||
|
|
||||||
// return http response
|
|
||||||
return new IlluminateResponse($content, 200, array(
|
|
||||||
'Content-Type' => $mime,
|
|
||||||
'Cache-Control' => 'max-age='.($config->get('imagecache.lifetime')*60).', public',
|
|
||||||
'Etag' => md5($content)
|
|
||||||
));
|
|
||||||
|
|
||||||
}))->where(array('template' => join('|', array_keys($config->get('imagecache.templates'))), 'filename' => '[ \w\\.\\/\\-]+'));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user