#laravel
#laravel
Вопрос:
Как мне проверить с помощью Laravel storage
, существует ли каталог?
В документации описано только, как проверить, существует ли файл.
Storage::disk('local')->exists('file.jpg');
Комментарии:
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));
}