Laravel 在 Blade 中使用 S3/CloudFront 资源

Laravel use S3/CloudFront resources in Blade

我对访问图像的最佳方法有点困惑,该图像上传到 S3 并通过 CloudFront 传送并在视图中显示(使用 CloudFront URL)。我使用 Laravel 5.5 并且我已经将 CDN URL 存放到我的 S3 配置中:

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => 'https://xxxxxx.cloudfront.net/',
    ],

以下可能性可行

我是第一次将 CloudFront 集成到 Laravel 应用程序中,那么之前做过这件事的人可以告诉我正确的方法是什么吗?非常感谢。

这是一个很好的方法。但是当使用本地文件系统驱动程序时,您将使用 public/storage/assets/img 目录,而不是 public/img 目录以使其等效。

https://laravel.com/docs/5.6/filesystem#the-public-disk

Public磁盘

public 磁盘用于存放将 public 只能访问的文件。默认情况下,public 磁盘使用本地驱动程序并将这些文件存储在 storage/app/public 中。要使它们可以从 Web 访问,您应该创建一个从 public/storage 到 storage/app/public 的符号 link。此约定会将您的 public 仅可访问的文件保存在一个目录中,当使用像 Envoyer 这样的零停机时间部署系统时,可以轻松地跨部署共享。

要创建符号 link,您可以使用 storage:link Artisan 命令:

php artisan storage:link

文件URLs

您可以使用 url 方法获取给定文件的 URL。如果您使用的是本地驱动程序,这通常只是将 /storage 添加到给定路径和 return 文件的相对 URL 之前。如果您使用的是 s3 或 rackspace 驱动程序,则完全限定的远程 URL 将 returned: