2017-11-26 7 views
1

私はlaravelのguzzleを使用して外部APIから画像にアクセスしようとしていますが、呼び出しが非常に高価になり、ページの読み込み時間に大きな影響を与えます。私はプロキシコールが問題を解決することを知っていますが、特定のエンドポイントがプロキシとして機能し、イメージを返すことができるlaravelでこれを達成する方法があります。ありがとう外部APIからプロキシを使用して画像アセットを要求する

+0

は、uは、この場合にキャッシュを検討していますか? –

+0

はい、私は、呼び出しが行われた後は正しくキャッシングを使用していますが、初めてオブジェクトの配列を取得すると最初の呼び出しが高価になり、各オブジェクトに特定のイメージがあり、取得する必要があります。理にかなった希望 – alithedeveloper

答えて

0

私は自分自身の問題に対する解決策を見つけ、答えを投稿します。より良い解決策があります。つまり、そのような呼び出しを処理するようにサーバーを構成することです。しかし、Laravelの文脈では、ここで私がしたことがあります。

私が一緒に仕事をしていたデータ

[ 
     "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 を出力するために、いくつかの動的静的関数または定期的な機能を持っていますあなたはimg srcをビルドしますが、ProxyControllerイメージメソッドを呼び出すことになります。すなわち、

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

- ステップ5 ブレード内のHTML

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

はそれが役に立てば幸い出力:D

関連する問題