我有一个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")) {
}