2015-01-26 2 views
1

У меня есть приложение Laravel 4, которое отображает изображения из другого приложения PHP, расположенного на удаленном сервере.Как кэшировать изображения с url в Laravel

Я хотел бы знать, что является лучшим решением для кеширования изображений с удаленного сервера в моем локальном приложении Laravel.

Пожалуйста, обратите внимание, что это практически невозможно копировать/прошлое каталога целиком изображений с удаленного сервера, так как есть более 150К изображения, которые regurlary обновляются (каждые минут), и существует корреляция базы данных слишком (имя файла с значение столбца в базе данных).

Я собирался использовать Rsync для синхронизации двух каталогов (удаленных от локальных), но мне также необходимо изменить размер изображений перед их отображением и организовать подкаталоги изображений по-другому, чем на удаленном сервере.

Сначала я установил Intervention Image Class пакет на Laravel и я создал Route:

Route::get('photos/item/{size}/{reference}/{photo}', '[email protected]'); 

И в ImgController:

public function showImg($size, $reference, $photo) 
{ 
    switch ($size) { 
     case '300x225': 
      $jpg = Image::make('http://myremoteapp.com/uploads/' . $reference . '/' . $photo)->resize(300, 225)->response('jpg'); 
     break; 
    } 
    return $jpg; 
} 

Это работает, но он не сохраняет изображения в кеш браузера, а также создает проблему с производительностью, поскольку изображения нужно загружать и изменять каждый раз при открытии страницы.

Я слышал о Intervention Image Cache, но я не уверен, что он работает с изображениями, сделанными из URL-адресов.

Любые советы и предложения относительно того, как правильно решить этот вопрос, будут очень признательны.

ответ

3

Вы можете с помощью маршрута кэша как:

Route::filter('cache', function($route, $request, $response = null) { 
    $key = 'route-' . safe_title(URL::full()); 
    if(is_null($response) && Cache::has($key)) { 
     return Cache::get($key); 
    } elseif(!is_null($response) && !Cache::has($key)) { 
     // Code this here 
     Cache::put($key, $response->getContent(), 30); 
    } 
}); 

    Route::group(array('before' => 'cache', 'after' => 'cache'), function() { 
    Route::get('photos/item/{size}/{reference}/{photo}', '[email protected]'); 
} 
Смежные вопросы