1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-01 11:30:16 +02:00

cachable imagecache route

This commit is contained in:
Oliver Vogel
2015-04-08 19:43:59 +02:00
parent 8f3761154b
commit 7edc830d19

View File

@@ -73,59 +73,22 @@ class ImageServiceProviderLaravel5 extends ServiceProvider
'imagecache'
);
$config = $app['config'];
// imagecache route
if (is_string(config('imagecache.route'))) {
// create dynamic manipulation route
if (is_string($config->get('imagecache.route'))) {
$filename_pattern = '[ \w\\.\\/\\-]+';
// add original to route templates
$config->set('imagecache.templates.original', null);
// route to access original file
$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) {
// find file
foreach ($config->get('imagecache.paths') as $path) {
// don't allow '..' in filenames
$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\\.\\/\\-]+'));
// route to access template applied image file
$app['router']->get(
config('imagecache.route').'/{template}/{filename}',
'Intervention\Image\ImageCacheController@getImage'
)->where(array('filename' => $filename_pattern));
}
}
}