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:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user