Laravel AWS S3图像流视图



如何获得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的更多信息,以及它如何优化您的网络响应。

最新更新