如何使用Laravel中的Storage::门面检查目录是否存在?

46

什么是......的对应物:

if (!File::exists($path))

在 Laravel 5.1 中如何使用 Storage::

有人知道吗?

17个回答

52

试试这个:

// To check if File exists in Laravel 5.1
$exists = Storage::disk('local')->has('file.jpg');

// To check if File exists in Laravel 5.2
$exists = Storage::disk('local')->exists('file.jpg');

15
谈论一个目录,而不是文件。 - Chriz74
5
exists 函数可以很好地用于目录,所以 ->exists('dirname'); 是可行的。 - DisgruntledGoat
7
目录只是包含文件的文件。 - Ivanka Todorova
该OP明确要求有关目录的信息。任务不仅仅是确定文件系统中是否存在“/foo/bar/something”,还要确定它是否是一个目录。 - Szczepan Hołyszewski
@IvankaTodorova 但是普通文件不行,这里的要求是能够确定给定的“文件”是否可以“包含其他文件”。 - Szczepan Hołyszewski
我认为作者的回答可以加上文件夹示例,并解释文件夹也是文件。 - Paulo Matos

30

如果您想检查一个目录是否存在并在不存在的情况下创建一个目录,这段代码将适用于您。

if(!Storage::exists('/path/to/your/directory')) {

    Storage::makeDirectory('/path/to/create/your/directory', 0775, true); //creates directory

}

从至少 Laravel 7 开始,Storage::makeDirectory() 只接受路径作为参数。 https://laravel.com/docs/7.x/filesystem#directories - Egnaro
方法makeDirectory()只接受一个参数。下面是正确的用法:if (Storage::missing($storagePath)) Storage::makeDirectory($storagePath); - Amir Hassan Azimi
Prateek提到的这些参数是用于File :: makeDirectory方法的。 - Adam

11

我认为exists只能在Laravel 5.2中使用,不是吗? - prava
@prava,它在这里:https://github.com/illuminate/filesystem/blob/master/Filesystem.php#L21 - Alexey Mezenin
谢谢,但我说的是路径而不是文件。 - Chriz74
@Chriz74,很抱歉我不使用AWS,所以无法帮助你。你最初的问题是关于目录的。你可以在AWS上尝试我的解决方案,并告诉我们它是否有效。 - Alexey Mezenin
4
directories 函数返回一个数组,而不是一个集合(Collection),因此无法使用 has() - DisgruntledGoat
显示剩余5条评论

7

需要检查两件事情:(1)路径是否存在,(2)路径是否为目录。

下面的语句可以检查路径是否存在(适用于Laravel 5.2+),无论是文件还是目录:

Storage::exists('your-path') // bool

一旦您知道它的存在,这将确认该路径是一个目录:

Storage::getMetadata('your-path')['type'] === 'dir' 

底层的Flysystem库会在检查文件系统(可以是本地或远程)时缓存它所能缓存的内容,因此在正常情况下,这两个函数只会对文件系统进行一次调用。


1
这实际上是有效的(并回答了问题),即使在选择磁盘后也是如此。一行代码:if (!(Storage::disk('mydisk')->exists($path) && Storage::disk('mydisk')->getMetadata($path)['type'] === 'dir')) { echo "path '$path' is not a directory"; } - Marten Koetsier

6

使用存储门面的另一种laravel 5.5方法。

use Illuminate\Support\Facades\Storage;
if(Storage::exists('/mnt/files/file.jpg')) {
    dd('file esxists');
} else {
    dd('no file found');
}

4

在Laravel 8.x中,您可以使用以下条件:

use Illuminate\Support\Facades\Storage;

if (Storage::disk('public')->exists($path)) 
{
    // 
}

4
$exists = Storage::disk('local')->has('**dirname**');

4
if(!Storage::disk('public')->exists('your folder name'))
{
    //what you want to do
}

3
在Laravel 5.4中,代码如下: $exists = Storage::disk('public')->exists('images/test_image.jpg'); 其中的'public'是在filesystem.php中进行配置的。
'public' => [
    'driver' => 'local',
    'root'   => public_path(),
    'url' => env('APP_URL').'/public',
    'visibility' => 'public',
],

"

'images/test_image.jpg' 是图片的路径。

"

2
你可以通过文件门面简单地实现这一点File::isDirectory($YOURDIRECTORYPATHHERE);,它将根据存在情况返回布尔值!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接