laravel 存储存在 returns false 尽管文件存在
laravel storage exists returns false although file exists
我正在 laravel 中使用 Fpdi 修改上传的 pdf。
pdf 生成完美,我可以在任何文件资源管理器中看到它。但是 laravel 内置 Storage::exists() returns 错误。
这是一个非常奇怪的错误,因为 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
由于 Hassaan Ali 的评论,我设法使用文件而不是存储使其工作
我假设您的 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)
。
这意味着您在 public-磁盘上寻找 /my-project/storage/app/notes/some.pdf
。
public-disk 的根目录一般是 /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
我正在 laravel 中使用 Fpdi 修改上传的 pdf。 pdf 生成完美,我可以在任何文件资源管理器中看到它。但是 laravel 内置 Storage::exists() returns 错误。 这是一个非常奇怪的错误,因为 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
由于 Hassaan Ali 的评论,我设法使用文件而不是存储使其工作
我假设您的 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)
。
这意味着您在 public-磁盘上寻找 /my-project/storage/app/notes/some.pdf
。
public-disk 的根目录一般是 /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