所以我有一个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中关于此的文档非常混乱。 Laravel只是希望每个人都有从公共/存储到存储/应用/公共的符号链接
他们甚至以某种方式认为使用本地磁盘和方法url的每个人都想知道公用url,这仅对公用磁盘而言总是正确的。
config / filesystems.php
添加了'url'
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'url' => storage_path('app')
],
现在可以正常工作