- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不知道是不是误会了什么,但是我在上传文件的时候调用了如下方法:
$cover->storePubliclyAs($coverAsset->dir, $coverAsset->preview_name);
$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',
],
...
感觉是用local
盘代替public
盘?如何找出 UploadedFile->storePubliclyAs
方法使用的是哪一个?
最佳答案
函数 storePubliclyAs
基于此:https://github.com/laravel/framework/blob/5.5/src/Illuminate/Http/UploadedFile.php#L61
它只是将 file 的可见性设置为 public,这与您假设它将 file 移动/存储到公共(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
磁盘。您可以尝试在 .env 文件中附加 FILESYSTEM_DRIVER=public
或将 filesystems.php 中的第二个参数更改为公开
.
如果有任何错误,请告诉我,因为我没有尝试过任何这些,我只是阅读了代码。
如果想自己跟踪代码,可以在这里查看:https://github.com/laravel/framework/blob/5.5/src/Illuminate/Http/UploadedFile.php
关于laravel - storePubliclyAs 不保存在公用文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197427/
我是一名优秀的程序员,十分优秀!