如何查看Laravel中是否存在文件



我有一个Laravel Controller Function file_fetch()

public function file_fetch(Request $request) {
$file = request('routename');
$destinationPath = public_path('/folder/'.$file);

if(!File::exists($destinationPath)){
$content = File::get($destinationPath);
return view('filefetch', compact('file','content'));
} 
else {
return redirect('/')->witherrormessage('NO such File Exists');
}
}

如果我检查文件public/folder/app/index.html,如果我检查public/newfolder(新文件夹不存在),因此它执行else函数并重定向错误消息,但如果我搜索public/folder/app/,我没有指定文件名,但目录存在,因此if(!File::exists($destinationPath))函数正在执行!

我想检查目录中的文件,即使目录存在,如果文件不存在,抛出一个错误消息,说文件不存在。

添加一个额外的条件来检查给定的路径是文件而不是目录

public function file_fetch(Request $request) {
$file = request('routename');
$destinationPath = public_path('/folder/'.$file);

if(!File::exists($destinationPath) && !is_dir($destinationPath)){
$content = File::get($destinationPath);
return view('filefetch', compact('file','content'));
} 
else {
return redirect('/')->witherrormessage('NO such File Exists');
}
}

您可能可以通过验证routename输入来修复您的代码,使其永远不会为空(并且可能具有特定的文件扩展名?),无论如何,这都很好。

如果失败,您可以尝试File::isDirectory($dir),它基本上调用is_dir(...)

注意,如果你使用Laravel的Storage::disk('public')功能,它可能会给你更多的控制存储解决方案。API有点不同,但它有很大范围的概率。在这里阅读更多内容:https://laravel.com/docs/8.x/filesystem#introduction.

如果你在不同/多个桶。

//Do not forget to import
use IlluminateSupportFacadesStorage;
if (Storage::disk('s3.bucketname')->exists("image1.png")) {

}

相关内容

  • 没有找到相关文章

最新更新