Laravel s3 проверяет, существует ли каталог.

#laravel

#laravel

Вопрос:

Как мне проверить с помощью Laravel storage , существует ли каталог?

В документации описано только, как проверить, существует ли файл.

Storage::disk('local')->exists('file.jpg');

https://laravel.com/docs/5.3/filesystem#retrieving-files

Комментарии:

1. Вы нашли решение по этому вопросу? Мне нужно проверить фактическую корзину, если она существует, не какой-либо внутренний каталог или файл корзины, а саму корзину!

Ответ №1:

Ни один из приведенных здесь ответов, похоже, не отвечает конкретно на проверку того, существует ли определенная папка в S3. Это то, что я использую, и это работает:

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

Приведенное выше значение вернет логическое значение. Вышеуказанная проверка работает как для папок, так и для имен файлов.

Ответ №2:

В Laravel 5.7 используется: has() Метод используется для определения, существует ли данный файл на диске:

 $exists = Storage::disk('s3')->has('file.jpg');
  

Комментарии:

1. OP: «каталог»

Ответ №3:

Попробуйте получить список каталогов в родительском каталоге и проверьте, находится ли каталог, который вы ищете, в массиве:

 in_array('directoryYoureLookingFor', Storage::disk('s3')->directories('parentDirectory'));
  

Я только что проверил, и это решение работает в Laravel 5.3.

Комментарии:

1. Это выдаст ошибку: Call to a member function has() on array

2. Работает! Сделал это следующим образом: in_array('users/' . $user->id, Storage::disk('s3')->directories('users'));

Ответ №4:

Вы можете использовать isDirectory метод:

 if (File::isDirectory($filename))
{
    echo "Yes. It's a directory.";
}
  

Ответ №5:

Я также много раз сталкивался с такой же проблемой, когда проверял, существует файл или нет на S3 с помощью Laravel. Я работаю над Laravel 7.* и функции exists() и has() не обеспечивают надлежащего ответа при загрузке файла в подкаталог корзины S3. Я написал функцию, которая у меня работает идеально.

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

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

Он вернет true, если файл доступен на S3, иначе он вернет false.

Ответ №6:

Вы можете сделать следующее, то есть вы можете получить имя файла и сравнить его с именем файла, который вы пытаетесь загрузить, если он существует, укажите, какой еще файл вы можете вставить

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