Laravel的UploadedFile存储方法的行为与Storage :: url行为不符

问题描述 投票:0回答:1

所以我有一个UploadedFile,我想上传到特定的磁盘'local'。

// $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-请注意,该路径确实缺少应用程序/文件夹。

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

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

鉴于$ path以kml /开头的事实,使其无法正常工作是很有意义的。我的问题是,为什么。为什么这些不对应,如何获得完整的内部(而不是公共)路径?

laravel filesystems storage
1个回答
0
投票

好吧,这实际上很简单,但是我相信Laravel中关于此的文档非常混乱。 Laravel只是希望每个人都有从公共/存储到存储/应用/公共的符号链接

他们甚至以某种方式认为使用本地磁盘和方法url的每个人都想知道公用url,这仅对公用磁盘而言总是正确的。

config / filesystems.php

添加了'url'

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

现在可以正常工作

© www.soinside.com 2019 - 2024. All rights reserved.