Php 使用代理从外部Api请求图像资产

Php 使用代理从外部Api请求图像资产,php,laravel,api,guzzle6,Php,Laravel,Api,Guzzle6,然而,我正在尝试使用laravel中的guzzle从外部API访问图像,这是可以理解的,因为调用变得非常昂贵,并且会对页面加载时间产生巨大影响。我知道代理调用可以解决这个问题,但是,在laravel中是否有任何方法可以实现这一点,其中某个端点可以充当代理并返回图像。谢谢我找到了自己问题的解决方案,并将发布答案。请注意,有更好的解决方案,即配置服务器以处理此类呼叫。然而,在拉威尔的背景下,我所做的就是这样 我必须处理的数据 [ "orientation" => "portrait

然而,我正在尝试使用laravel中的guzzle从外部API访问图像,这是可以理解的,因为调用变得非常昂贵,并且会对页面加载时间产生巨大影响。我知道代理调用可以解决这个问题,但是,在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"
   ]

解决方案:

第一步 按照其功能,使用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', 'ProxyController@request_image');

步骤3 控制器方法,即request_image发出一个Guzzle请求,并返回响应,如下所示:

$link = request('link');

return \Response::stream(function() use($image){
        echo $image;
    },200, [$headers]);
步骤4 有一个静态函数或一个常规函数来输出一些动态html,您将构建这些html,但是在img src中,您将调用ProxyController映像方法,即

  $img = '<img src="'. action('ProxyController@request_image',$image['link']).'") >";

希望能有所帮助:D

我找到了自己问题的解决方案,并将发布答案。请注意,有更好的解决方案,即配置服务器以处理此类呼叫。然而,在拉威尔的背景下,我所做的就是这样

我必须处理的数据

[
      "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"
   ]

解决方案:

第一步 按照其功能,使用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', 'ProxyController@request_image');

步骤3 控制器方法,即request_image发出一个Guzzle请求,并返回响应,如下所示:

$link = request('link');

return \Response::stream(function() use($image){
        echo $image;
    },200, [$headers]);
步骤4 有一个静态函数或一个常规函数来输出一些动态html,您将构建这些html,但是在img src中,您将调用ProxyController映像方法,即

  $img = '<img src="'. action('ProxyController@request_image',$image['link']).'") >";

希望有帮助:D

在这种情况下,您考虑过缓存吗?是的,我在调用后正确使用缓存,但是,第一次调用很昂贵,因为我第一次得到一个对象数组,然后每个对象都有特定的图像,需要检索它们。希望有意义在这种情况下你考虑过缓存吗?是的,我在调用后正确使用缓存,但是,第一次调用很昂贵,因为我第一次得到一个对象数组,然后每个对象都有特定的图像,需要检索它们。希望这是有道理的