Laravel 5.6创建目录前是否需检查?图片存储函数代码优化疑问
在Laravel 5.6中存储文件前,是否需要提前检查目录是否存在?
嘿,这个问题问到点子上了!咱们结合你给出的图片存储场景来唠唠:
首先明确告诉你结论:完全不需要手动提前检查目录是否存在,你的第一个示例代码写法是没问题的,而且足够简洁。
为什么这么说呢?因为Laravel的Storage facade底层依赖的是Flysystem文件系统库,它在执行put操作写入文件时,会自动帮你递归创建所有不存在的父目录。也就是说,当你执行:
Storage::disk('public')->put($filename, File::get($file));
哪怕public/user_{$user->id}_images这个目录完全不存在,Flysystem也会自动帮你创建这个目录,然后顺利把文件写入进去,不会抛出任何错误。
可能有人会习惯先写一段检查目录的逻辑,比如:
$path = "user_" . $user->id . "_images"; if (!Storage::disk('public')->exists($path)) { Storage::disk('public')->makeDirectory($path); } // 再执行put操作
但这其实是多余的——put操作已经内置了目录创建的逻辑,额外加检查反而多了一次文件系统的IO操作,完全没必要。
当然,如果你的场景是单独创建目录而不写入文件,那时候可以直接调用makeDirectory,这个方法本身也会处理目录已存在的情况(不会报错,只会返回false表示目录已存在),所以同样不需要提前检查,除非你需要根据目录是否存在来执行不同的业务逻辑。
回到你的图片存储函数,保持现有简洁的写法就好,不用额外加目录检查的代码,Laravel已经帮你搞定了这些底层细节。
内容的提问来源于stack exchange,提问作者Adrian Higgins
相关产品推荐
相关产品推荐

