【问题标题】:Laravel's UploadedFile store method's behavior doesn't correspond with Storage::url behaviorLaravel 的 UploadedFile 存储方法的行为与 Storage::url 的行为不对应
【发布时间】:2020-07-20 05:45:23
【问题描述】:

所以我有一个 UploadedFile 我想上传到特定磁盘“本地”。

// $storedFilePath == "kml/uploadedfile.xml";
$storedFilePath = $request->file->store("kml", "local");

该文件实际上已上传到 storage/app/kml/uploadedfile.xml - 这是正确的,遵循本地磁盘的配置:

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

另一方面,我需要获取此文件的完整 URL 路径(相对于项目根目录)。我试过了

 Storage::disk("local")->url($storedFilePath);

但这让我/storage/kml/uploadedfile.xml - 注意路径确实错过了 app/ 文件夹。

Laravel 的 FilesystemAdapter.php 中决定路径的一行在这里(函数 getLocalUrl):

    $path = '/storage/'.$path;

鉴于 $path 是以 kml/ 开头的事实,它不起作用是完全有道理的。我的问题是,为什么。为什么这些不对应,我如何获得完整的内部(而不是公共)路径?

【问题讨论】:

  • 对于想要将这个问题作为this one 的副本来结束的人,让我告诉你答案实际上并没有告诉我为什么 Laravel 会给出错误的路径以及我如何真正得到正确的路径而无需手动附加“app/”,因为它会破坏使用存储磁盘的全部目的

标签: laravel filesystems storage


【解决方案1】:

好的,这实际上很简单,但我相信 Laravel 中有关此的文档相当混乱。 Laravel 只是希望每个人都有一个从 public/storage 到 storage/app/public 的符号链接

不知何故,他们甚至认为每个使用本地磁盘和方法 url 的人都想知道公共 url,这仅适用于公共磁盘。

config/filesystems.php

添加了“网址”

   'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
        'url' => storage_path('app')
    ],

现在可以正常工作

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2021-02-13
    • 2020-04-27
    • 1970-01-01
    • 2016-04-14
    • 2019-05-27
    • 2021-08-31
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多