Laravel s3检查目录是否存在。

6

你在这个问题上找到解决方案了吗?我需要检查实际的存储桶是否存在,而不是存储桶中的任何内部目录或文件,而是存储桶本身! - GeorgeGeorgitsis
6个回答

6
在 Laravel 5.7 中使用: has() 方法用于确定磁盘上是否存在给定的文件:
$exists = Storage::disk('s3')->has('file.jpg');

1
目录 - digout

6

这里没有一个特别回答如何检查S3中是否存在一个特定的文件夹的答案。下面是我的解决方法,它可以工作:

Storage::disk('s3')->exists('FOLDER_NAME')

上述代码将返回一个布尔值。该检查适用于文件夹和文件名。


2
尝试在父目录中获取目录列表,并检查您要查找的目录是否在数组中:
in_array('directoryYoureLookingFor', Storage::disk('s3')->directories('parentDirectory'));

我刚刚检查过,这个解决方案适用于Laravel 5.3。


这将会抛出一个错误:在数组上调用成员函数has() - Jamie
1
成功了!是这样做的:in_array('users/' . $user->id, Storage::disk('s3')->directories('users')); - Jamie

1
您可以使用 isDirectory 方法:
if (File::isDirectory($filename))
{
    echo "Yes. It's a directory.";
}

1

我也遇到过相同的问题,想要检查在 Laravel 中 S3 上是否存在文件。我正在使用 Laravel 7.* ,当文件上传到 S3 子目录时, exists() 和 has() 函数无法提供正确的响应。我编写了一个函数,它对我来说完美地工作。

public static function fileExistsS3($directoryOnS3, $image) {
    $directoryOnS3 = Config::get('custom.AWS_PUBLIC_ENDPOINT').$directoryOnS3;
    $exists = @getimagesize($directoryOnS3.$image);

    if(isset($exists) && is_array($exists)) {
        return true;
    } else {
        return false;
    }
}

如果S3上有文件,则返回true,否则返回false。

0

你可以做以下的事情,即获取文件名并将其与你尝试上传的文件名进行比较,如果存在则给出一个消息,否则你可以插入。

$file = Storage::disk('local')->get($filename);
if($file){
    echo "file exist";
} else {
    Storage::disk('local')->put($filename,FILE::get($file));
}

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