Laravel调用Storage::get提示路径文件不存在但路径正确问题求助
错误原因说明
- Storage Facade 路径匹配逻辑错误
Laravel 中StorageFacade 默认的查找根目录为storage/app,你传入public_path()生成的绝对路径时,Storage 会将传入路径识别为相对于自身根目录的相对路径,最终拼接出的查找路径和实际文件路径不符,因此抛出文件不存在错误。
另外你报错信息里的路径缺少根目录前缀/(正常Mac系统下的绝对路径应为/Applications/...),也会导致路径被识别为相对路径,进一步触发找不到文件的问题。 - 方法调用逻辑错误
Storage::get()方法返回的是文件内容字符串,并非文件实例,后续调用move()方法本身也会执行报错。
解决方案
如果要实现移动public目录下的文件,推荐两种实现方式:
- 方式1:使用
FileFacade 操作(更适合public目录的本地文件操作)
$imageName = $thishire->color_image; $originPath = public_path('/img/colorImages/' . $imageName); $targetPath = public_path('/img/uploads/' . $imageName); // 先判断文件是否存在,避免执行报错 if (\File::exists($originPath)) { \File::move($originPath, $targetPath); }
- 方式2:使用Storage的public磁盘操作(需要先确认配置)
先确认config/filesystems.php中disks.public.root配置为public_path(),再调用:
$imageName = $thishire->color_image; // 仅需传入相对于public目录的相对路径即可 if (Storage::disk('public')->exists('img/colorImages/'.$imageName)) { Storage::disk('public')->move('img/colorImages/'.$imageName, 'img/uploads/'.$imageName); }
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

