如何使用Storage facade删除文件?使用时无法删除图片是什么原因?
问题根源
Laravel Storage 门面的本地驱动默认会以配置的磁盘根目录作为路径拼接基准,和原生unlink以项目根目录为基准的逻辑不同:
- 默认
local磁盘的根路径为storage/app,你传入Storage::delete('storage/'.$post->imagePath)时,框架实际查找的路径是storage/app/storage/[你的图片路径],和你用unlink时生效的[项目根目录]/storage/[你的图片路径]完全不匹配,因此无法定位到要删除的文件。
修复方案
方案1(推荐:保持磁盘配置统一)
如果你存储图片时用的是public磁盘(Laravel 推荐用于存储公开可访问资源的磁盘,默认根路径为storage/app/public,对应项目public/storage软链接),删除时指定磁盘即可,不需要加storage/前缀:
public function destroy(Post $post) { Storage::disk('public')->delete($post->imagePath); $post->delete(); return redirect(route('posts.index'))->with('flash', 'Post Deleted Successfully'); }
方案2(传入绝对路径)
如果不想调整磁盘配置,也可以直接传入文件的绝对路径,Storage 会直接识别绝对路径执行删除:
Storage::delete(public_path('storage/'.$post->imagePath));
排查技巧
如果调整后仍然不生效,可以先打印 Storage 实际查找的路径对比验证:
dd(Storage::path('storage/'.$post->imagePath));
内容的提问来源于stack exchange,提问作者Alphy Gacheru
相关产品推荐
相关产品推荐

