Laravel AWS S3 图像流视图

Laravel AWS S3 Image Streaming view

如何获取 AWS S3 图像作为流视图?

现在我可以看到如下图 url:

<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 证书。

您可以按照this article了解详细步骤。

分发可用后,您可以使用您的域 url 访问 S3 文件,例如https://s3.us-east-1.amazonaws.com/my-bucket/path/to/image.png 可以作为 https://myproject.com/image.png.

访问

如果您想为图像使用一些自定义路径,例如/upload/image.png 您可以使用 Behaviour 并指定该路径。

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