目的Laravel文件系统/存储 - 本地/公共文件的URL不工作
嗨,我使用laravel为一个RESTful API。 我想将用户的URL返回给图像文件。 我目前正在使用本地存储,但我已经配置了一个Amazon S3实例,并同步了我的图像。 我的目标是通过简单地改变第一行中我的配置/ filesystems.php本地存储和S3之间无缝切换:
'default' => 'public',
详细
我已经配置laravel来访问本地磁盘和S3通过config/filesystems.php文件。 根据laravel说明,我已将公共/存储软链接到存储/应用程序/公共。 这里是我的配置/ filesystems.php磁盘阵列:
'disks' => [
// 'local' => [
// 'driver' => 'local',
// 'root' => storage_path('app'),
// ],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => '...',
'secret' => '...',
'region' => '...',
'bucket' => 'mybucket',
],
],
这是我的文件夹层次:
在本地磁盘上:
- myLaravelApp /存储/移动/背景/
- myLaravelApp/storage/mobile/closetimages/
- myLaravelApp/storage/mobile/profileimages/
在S3
- mybucket /移动/背景/
- mybucket /移动/ closetimages/
- mybucket /移动/ profileimages/
正如我刚才所说,我会喜欢在本地存储和s3之间进行无缝切换,只需更改config/filesystems.php中的第一行:
'default' => 'public',
,我希望用下面的函数调用数据返回给用户:
return Storage::url('mobile/profileimages/12345.jpg');
当我拨打这个电话与S3作为默认情况下,反应是这样的:
https://s3.amazonaws.com/mybucket/mobile/profileimages/12345.jpg
这是辉煌的!但是,当我使用默认本地存储进行此调用时,响应为:
/storage/mobile/profileimages/12345。JPG
这是不是一个完整的网址:(我想做些什么回报是一样的东西:
http://mywebapp/storage/mobile/profileimages/12345.jpg
但我想相同的呼叫到两个S3和本地存储工作这样我就可以无缝切换。
我使用它错误地?这是令人沮丧,因为这显然是一个图书馆/框架调用,所以我希望它工作,或者至少返回一个完整的URL。
谢谢
这看起来辉煌。你有什么建议将这个功能放在我的laravel项目中,以便使它可以广泛访问,因为它看起来或多或少是全局功能。谢谢 – mils
我很高兴它帮助。我只是把它放在app/helpers.php文件中。如果你确定使用这种方法,不要忘记通过在你的'composer.json'的''autoload''部分添加''files':[“app/helpers.php”]来自动加载它。 – peterm