如何获得AWS S3图像作为流式视图?
现在我可以看到图片如下网址:
<img src="https://s3.us-east-1.amazonaws.com/my-bucket/image.png" />
我想要这样:
<img src="https://myproject.com/upload/image.png" />
我试了以下方法,但没用。我的路线:
Route::get('/upload/{path_to_image}', 'FileController@getImage')->where('path', '(.*)');
-我的控制器
public function getImage($disk, $path)
{
$headers = array(
'Content-Type: application/image',
);
if(Storage::disk("s3")->exists($path))
{
$file = Storage::disk("s3")->path($path);
return response()->file($file, $headers);
}
abort(404);
}
任何建议都将不胜感激!
此解决方案基于AWS
使用带有自定义域名的CloudFront(CDN(来使用您自己的url代替S3 url。
- 创建一个CloudFront分发并将其附加到S3存储桶中
- 在查看器协议策略中仅允许HTTPS请求
- 对于备用域名(CNAME(,请键入您的自定义域
- 为您的域提供SSL证书
您可以按照本文了解详细步骤。
一旦分发可用,您就可以使用域url访问S3文件,例如https://s3.us-east-1.amazonaws.com/my-bucket/path/to/image.png
可以作为https://myproject.com/image.png
访问。
如果你想为图像使用一些自定义路径,例如/upload/image.png
,你可以使用Behavior并指定该路径。
请阅读本文,了解有关CloudFront的更多信息,以及它如何优化您的网络响应。