Php 使用代理从外部Api请求图像资产
然而,我正在尝试使用laravel中的guzzle从外部API访问图像,这是可以理解的,因为调用变得非常昂贵,并且会对页面加载时间产生巨大影响。我知道代理调用可以解决这个问题,但是,在laravel中是否有任何方法可以实现这一点,其中某个端点可以充当代理并返回图像。谢谢我找到了自己问题的解决方案,并将发布答案。请注意,有更好的解决方案,即配置服务器以处理此类呼叫。然而,在拉威尔的背景下,我所做的就是这样 我必须处理的数据Php 使用代理从外部Api请求图像资产,php,laravel,api,guzzle6,Php,Laravel,Api,Guzzle6,然而,我正在尝试使用laravel中的guzzle从外部API访问图像,这是可以理解的,因为调用变得非常昂贵,并且会对页面加载时间产生巨大影响。我知道代理调用可以解决这个问题,但是,在laravel中是否有任何方法可以实现这一点,其中某个端点可以充当代理并返回图像。谢谢我找到了自己问题的解决方案,并将发布答案。请注意,有更好的解决方案,即配置服务器以处理此类呼叫。然而,在拉威尔的背景下,我所做的就是这样 我必须处理的数据 [ "orientation" => "portrait
[
"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在这种情况下,您考虑过缓存吗?是的,我在调用后正确使用缓存,但是,第一次调用很昂贵,因为我第一次得到一个对象数组,然后每个对象都有特定的图像,需要检索它们。希望有意义在这种情况下你考虑过缓存吗?是的,我在调用后正确使用缓存,但是,第一次调用很昂贵,因为我第一次得到一个对象数组,然后每个对象都有特定的图像,需要检索它们。希望这是有道理的