首页 > 解决方案 > 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);
    }

任何建议将不胜感激!

标签: phplaravelamazon-s3laravel-storagelaravel-filesystem

解决方案


该解决方案基于 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您可以使用行为并指定该路径。

请阅读本文以了解有关 CloudFront 以及它如何优化您的 Web 响应的更多信息。


推荐阅读