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 link 复制并粘贴到模板中(我猜不是 laravel 方式)。
- 使用
<img src="{{ Storage::url('assets/img/image.png') }}" />
。这个可行,但这是正确的方法吗?这里的问题是,如果我将 FILESYSTEM_DRIVER
改回本地,我将无法像之前使用 {{ asset('img/icons/time.png') }}
那样引用 DOCROOT/public/img
文件夹中的资源,所以我失去了灵活性- 也许我需要将资产复制到 DOCROOT/storage/app/public/
由 local
驱动程序使用?
我是第一次将 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:
我对访问图像的最佳方法有点困惑,该图像上传到 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 link 复制并粘贴到模板中(我猜不是 laravel 方式)。
- 使用
<img src="{{ Storage::url('assets/img/image.png') }}" />
。这个可行,但这是正确的方法吗?这里的问题是,如果我将FILESYSTEM_DRIVER
改回本地,我将无法像之前使用{{ asset('img/icons/time.png') }}
那样引用DOCROOT/public/img
文件夹中的资源,所以我失去了灵活性- 也许我需要将资产复制到DOCROOT/storage/app/public/
由local
驱动程序使用?
我是第一次将 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: