2017-11-26 12 views
1

laravel에서 guzzle을 사용하여 외부 API에서 이미지에 액세스하려고합니다. 그러나 호출이 정말 비싸지고 페이지 로딩 시간에 큰 영향을줍니다. 프록시 호출이 문제를 해결할 것이라는 것을 알고 있지만, 특정 엔드 포인트가 프록시로 작동하여 이미지를 반환 할 수있는 라우트에서이를 달성 할 수있는 방법이 있습니다. 감사합니다프록시를 사용하여 외부 API에서 이미지 애셋 요청하기

+0

는 u는이 경우 캐싱을 고려 ​​했는가? –

+0

그렇습니다. 호출이 이루어지면 캐싱을 제대로 사용하고 있지만, 처음에는 객체의 배열을 얻은 다음 각 객체가 특정 이미지를 가져 와서 검색해야하므로 첫 번째 호출은 비용이 많이 듭니다. 의미있는 희망 – alithedeveloper

답변

0

나는 내 자신의 문제에 대한 해결책을 찾았으며 답을 게시 할 것입니다. 더 나은 솔루션 즉, 이러한 호출을 처리하도록 서버를 구성하는 것이 좋습니다. 그러나 Laravel의 맥락에서, 내가 한 일이 여기있다.

I가 작동하도록 한 데이터

[ 
     "orientation" => "portrait" 
     "fig_type" => "diagram" 
     "id" => "A_SDEF-05-2016-0003001" 
     "position" => "float" 
     "label" => "Figure 1." 
     "caption" => "some caption" 
     "link" => "/resource/id/A_SDEF-05-2016-0003001.tif" 
    ] 

해결책 :

1 단계 루프의 기능과 Laravel의 모음을 사용하여 데이터를 통해;

// Pass the link as a get request parameter to laravel route 
// i.e. localhost/proxy/image?link=resource/id/A_SDEF-05-2016-0003001.tif 
return collect($images)->each(function ($image) 
{ 
     if ($image['link']) { 
      $image['link'] = ltrim($image['link'],'/'); 
      return $image['link'] ="link={$image['link']}"; 
     } 
     return $image; 
}); 

노선의 종점 등록 2 단계는 예를 들어 파일

Route::get('/proxy/image', '[email protected]_image'); 

3 단계 제어기 방법 즉 request_image는 목구멍 요청을 수행하고 응답을 반환 :

$link = request('link'); 

return \Response::stream(function() use($image){ 
     echo $image; 
    },200, [$headers]); 

4 단계 정적 기능 또는 출력되어 동적으로 일정한 기능을 갖는다을 html 당신은 img src에서 당신은 ProxyController 이미지 메쏘드를 호출 할 것이다. 즉

$img = '<img src="'. action('[email protected]_image',$image['link']).'") >"; 

- 스텝 5 출력

{!! Asset::image($image) !!} // Just output the built html 

는 희망이 도움이 블레이드의 HTML : D는