Laravel Model Event的delete()方法无法删除存储文件问题
解决FilePond上传文件删除失败的问题
问题原因
你的代码没指定文件存储的磁盘,Laravel的Storage类默认使用local磁盘(对应storage/app目录),但你的文件存在public磁盘(对应storage/app/public目录),导致找不到文件,所以只删了数据库记录,实际文件没被删除。另外第一种方式里用storage_path()拼接绝对路径的方式,和Storage类的路径判断逻辑不匹配,也会导致判断错误。
修正后的代码
方式一:循环删除单个文件
foreach($this->attachments as $attachment) { // 指定public磁盘检查并删除文件 if(Storage::disk('public')->exists($attachment)) { Storage::disk('public')->delete($attachment); } }
方式二:批量删除文件
// 先判断数组非空,再批量删除 if(!empty($this->attachments)) { Storage::disk('public')->delete($this->attachments); }
额外注意事项
- 确认数据库中
attachments数组存储的路径格式正确,应该是类似vehicle-images/随机字符串.jpg的相对路径,不要带开头的斜杠(比如/vehicle-images/xxx),也不要包含public/前缀(因为public磁盘已经对应storage/app/public目录)。 - 确保
$this->attachments确实是有效的文件路径数组,没有空值或错误路径。
内容的提问来源于stack exchange,提问作者Abdulrahman Mushref
相关产品推荐
相关产品推荐

