Pat*_*.SE 3 laravel laravel-5.5
我不知道我是否误解了什么,但我在文件上传过程中调用了以下方法:
$cover->storePubliclyAs($coverAsset->dir, $coverAsset->preview_name);
Run Code Online (Sandbox Code Playgroud)
$coverAsset->dir
返回businesses/2
并$coverAsset->preview_name
返回一个散列的文件名。
上传后,我最终得到一个文件:
storage/app/businesses/1/pre-AxDMVlSN.jpeg
我很困惑,为什么文件没有保存在storage/app/public/businesses/...
?我希望“公开”部分将它放在 Laravel 提供的存储目录结构的公共文件夹中。
我查看了我的文件系统配置:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
...
Run Code Online (Sandbox Code Playgroud)
感觉local
是用磁盘而不是public
磁盘?我如何找出UploadedFile->storePubliclyAs
方法使用了哪一个?
storePubliclyAs
基于此的函数:https : //github.com/laravel/framework/blob/5.5/src/Illuminate/Http/UploadedFile.php#L61
它只是将文件的可见性设置为public,这与您假设它将文件移动/存储到public 文件夹中的情况相反。
实际选择要存储的磁盘。只要使用的第三个可选的参数,storePubliclyAs
也就是$options
参数。
请注意,如果您没有选择磁盘(通过传递 $options 参数),Laravel 将使用基于您的 filesystems.php 配置文件的默认选择磁盘。
根据我对代码的了解,您可以将磁盘名称作为第三个参数传递。
所以而不是这个:
$cover->storePubliclyAs($coverAsset->dir, $coverAsset->preview_name);
使用它(我们将使用public
它,因为您想将它存储在名为public的磁盘中):
$cover->storePubliclyAs($coverAsset->dir, $coverAsset->preview_name, 'public');
此外,看看 Laravel 的默认filesystems.php:https : //github.com/laravel/laravel/blob/master/config/filesystems.php#L16
该行在.env文件中查找FILESYSTEM_DRIVER
条目,但是如果没有找到,它将使用第二个参数;默认情况下是.local
我认为您的配置默认为local
磁盘。您可以尝试做的是FILESYSTEM_DRIVER=public
在.env文件中附加或将filesystems.php 中的第二个参数更改为public
.
如果有任何错误,请告诉我,因为我还没有尝试过任何这些,我刚刚阅读了代码。
如果想自己跟踪代码,可以在这里查看:https : //github.com/laravel/framework/blob/5.5/src/Illuminate/Http/UploadedFile.php
归档时间: |
|
查看次数: |
2534 次 |
最近记录: |