【问题标题】:Laravel 5.7 upload to public folder doesnt' workLaravel 5.7 上传到公用文件夹不起作用
【发布时间】:2019-07-05 09:35:15
【问题描述】:

我正在尝试将图像上传到链接到 Laravel 的公用文件夹的 storage/app/public/ 文件夹。我的filesystems.php 是这样配置的:

'default' => env('FILESYSTEM_DRIVER', 'public')
//rest of the code
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

在我的控制器上,我上传图片:

$file = $request->hasFile('imagem');
$file = $request->file('imagem')->isValid();

$upload = $request->imagem->store('instituicoes');

我希望将文件上传到此路径storage/app/public/instituicoes,但是当我使用此代码时,Laravel 在storage/app 文件夹中创建“instituicoes”文件夹,而不是在我定义为存储路径的storage/app/public/。

【问题讨论】:

  • 您是否通过php artisan storage:link 链接了您的存储文件夹?!
  • 几天前,有人想从 URL 中删除 storage 字样。我提供了this 解决方案,但我认为它可以让您了解设置除storage/app/public 之外的其他位置以进行链接。
  • 我用过php artisan storage:link
  • FILESYSTEM_DRIVER 环境变量的值是多少?如果不是public,则默认不存储到公盘
  • 它是公开的。这是我在问题中展示的第一行代码。

标签: php laravel


【解决方案1】:

由于您的默认磁盘使用FILESYSTEM_DRIVER 环境变量,请确保该变量的值设置为public 作为您的默认磁盘。看起来它可能正在使用您的 local 磁盘。

您也可以尝试更改此设置:

$upload = $request->imagem->store('instituicoes');

到这里:

$upload = $request->imagem->store('instituicoes', 'public');

强制使用public 磁盘而不是默认值。

【讨论】:

  • FILESYSTEM_DRIVER 设置为 public,正如我在问题的第一行代码中所示。我试过这个: $upload = $request->imagem->store('instituicoes', 'public');但是图像没有存储在公共场所,也没有存储在应用程序/机构中,因为它正在发生。
  • @NatanRochaBatista 第一行实际上 not 显示了值。 env() 的第二个参数是 default 值,仅在未在任何地方设置环境变量时使用(例如在您的 .env 文件中)。无法从您的代码中判断该值是否已在任何地方设置。
  • 这个 'FILESYSTEM_DRIVER' 没有在代码的其他任何地方设置,甚至在 .env 文件中也没有。我刚刚搜索了它,设置此变量的唯一文件是 filesystems.php。我试图dd(env('FILESYSTEM_DRIVER') 找到变量值,它返回null。
  • @NatanRochaBatista Storage::disk('public')->path('') 返回什么?
  • @NatanRochaBatista 还有,您是否仔细检查过您的服务器在公用文件夹中是否具有写入权限?如果您尝试->store('instituicoes', 'public') 并且它没有保存在 either 文件夹中,那么听起来您的服务器没有写入权限
【解决方案2】:

来自https://laravel.com/docs/5.7/filesystem

公共磁盘用于存放可公开访问的文件。默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在 storage/app/public 中。为了使它们可以从 Web 访问,您应该创建一个从 public/storage 到 storage/app/public 的符号链接。

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

php artisan storage:link

【讨论】:

  • 已链接。发生的事情是文件没有上传到storage/app/public,正如我在问题中描述的那样。
猜你喜欢
  • 2019-01-27
  • 2018-05-03
  • 2016-03-24
  • 2019-06-21
  • 2018-10-10
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多