使用代理从外部 Api 请求图像资源
Requesting Image Assets from external Api using a proxy
我正在尝试在 laravel 中使用 guzzle 从外部 API 访问图像,但是,可以理解的是,调用变得非常昂贵并且对页面加载时间产生了巨大影响。我知道代理调用可以解决这个问题,但是,在 laravel 中,某个端点可以充当代理并且可以 return 图像,有什么方法可以实现这一点。谢谢
我找到了解决我自己问题的方法,并将 post 给出答案。请注意,有更好的解决方案,即配置您的服务器来处理此类调用。但是,在 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 请求,return 响应为:
$link = request('link');
return \Response::stream(function() use($image){
echo $image;
},200, [$headers]);
步骤 4
有一个静态函数或一个常规函数来输出一些你将构建的动态 html 但是在 img src 中你会调用 ProxyController 图像方法,即
$img = '<img src="'. action('ProxyController@request_image',$image['link']).'") >";
-第5步
在 blade
中输出 html
{!! Asset::image($image) !!} // Just output the built html
希望对您有所帮助:D
我正在尝试在 laravel 中使用 guzzle 从外部 API 访问图像,但是,可以理解的是,调用变得非常昂贵并且对页面加载时间产生了巨大影响。我知道代理调用可以解决这个问题,但是,在 laravel 中,某个端点可以充当代理并且可以 return 图像,有什么方法可以实现这一点。谢谢
我找到了解决我自己问题的方法,并将 post 给出答案。请注意,有更好的解决方案,即配置您的服务器来处理此类调用。但是,在 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 请求,return 响应为:
$link = request('link');
return \Response::stream(function() use($image){
echo $image;
},200, [$headers]);
步骤 4 有一个静态函数或一个常规函数来输出一些你将构建的动态 html 但是在 img src 中你会调用 ProxyController 图像方法,即
$img = '<img src="'. action('ProxyController@request_image',$image['link']).'") >";
-第5步 在 blade
中输出 html{!! Asset::image($image) !!} // Just output the built html
希望对您有所帮助:D