laravel - Laravel 的 UploadedFile 存储方法的行为与 Storage::url 行为不对应
问题描述
所以我有一个 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/ 开头的事实,它不起作用是完全有道理的。我的问题是,为什么。为什么这些不对应,我如何获得完整的内部(而不是公共)路径?
解决方案
好的,这实际上很简单,但我相信 Laravel 中关于此的文档相当混乱。Laravel 只是希望每个人都有一个从 public/storage 到 storage/app/public 的符号链接
他们甚至认为每个使用本地磁盘和方法 url 的人都想知道公共 url,这仅适用于公共磁盘。
配置/文件系统.php
添加了“网址”
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'url' => storage_path('app')
],
现在可以正常工作
推荐阅读
- c# - 更改为 .cshtml 文件后如何强制 CS web 重新编译
- python - 我对如何在 Python 2.7 中用答案替换测验空格感到困惑
- docker - 登录 Heroku bash,编辑文件,然后重新启动应用程序而不重新推送
- python - 如何获取在某些列上具有相似值的数据框子集?
- angular - Angular HttpClient 向 Spring REST API 发布请求未知错误
- python - 为什么在这种情况下,python 的 strip 和 lstrip 方法的行为不符合预期?
- javascript - Slack 为用户请求权限
- javascript - 如何获取 32 位整数的位长度
- javascript - 如何在测试脚本中动态更新 ResponseBody?
- javascript - 在 Node-RED 的函数节点中使用 javascript 内置函数