php - 尽管文件存在,laravel storage exists 返回 false
问题描述
我正在 laravel 中使用 Fpdi 修改上传的 pdf。pdf 生成完美,我可以在任何文件资源管理器中看到它。但是 Laravel 内置 Storage::exists() 返回 false。这是一个非常奇怪的错误,因为 php file_exists 方法可以完美地找到具有相同路径的文件,以及 File::exists
我完全没有想法。任何帮助,将不胜感激!
src 变量由 Storage::path()
$src = Storage::path("notes/".$this->note->id."-downgraded.pdf");
Storage::disk('public')->exists($src); //this returns false
file_exists($src); //this returns true
File::exists($src) //this returns true
解决方案
我假设您的 laravel 项目正在使用默认的 laravel 文件系统配置。
如果您使用Storage:disk('public')
,则此磁盘上的根目录不同于Storage:path()
.
这意味着您实际上已经$src
从一个磁盘中检索并检查了它在完全不同的磁盘上的存在。
如果您在Storage
没有磁盘的情况下使用,则将使用默认磁盘。默认情况下,它是local
,因此
$src
是这样的:/my-project/storage/app/notes/some.pdf
.
(请参阅./config/filesystem.php
检查您的实际磁盘和默认配置)
你检查了这样的存在:Storage::disk('public')->exists($src)
.
这意味着您/my-project/storage/app/notes/some.pdf
在公共磁盘上查找。
公共磁盘的根目录通常是/my-project/storage/app/public
.
这意味着存在方法实际上是在检查
/my-project/storage/app/public/my-project/storage/app/notes/some.pdf
. 我认为这不是您所期望的。
您的存在检查应如下所示:
# public disk root-directory is configured this:
# /my-project/storage/app/public
# file is actually here:
# /my-project/storage/app/public/notes/some.pdf
$src = "notes/some.pdf"
Storage::disk('public')->exists($src);
使用Storage
根本不需要你知道文件的绝对路径。如果使用得当,您甚至根本不需要关心文件的位置。
我强烈建议在这里阅读手册:https ://laravel.com/docs/master/filesystem
推荐阅读
- r - R中read.table函数中的row.names问题
- java - 如何获取当前用户的 Firebase 令牌
- javascript - 如何要求用户向 Discord Bot 输入第二个输入?
- python - 如何在python中以数据框格式一次打开位于不同子文件夹中的多个压缩excel文件(.gz文件)?
- sql - 如何在不指定道路的情况下按道路和方向以及严重程度进行顶级分组
- spring - org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“POST”
- azure - Azure 存储帐户容器公共访问级别已禁用
- typescript - 从 JS 迁移到 TS,遇到“SyntaxError: Cannot use import statement outside a module”
- passport.js - Nest.js Auth Guard JWT 身份验证不断返回 401 未授权
- r - 通过多个页面使用 rvest 进行抓取