You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel删除文章时删除存储图片报错:Storage类未找到

问题原因与解决方案

为什么系统会在控制器目录查找Storage类?

兄弟,这是PHP命名空间的锅!你的控制器默认处于App\Http\Controllers命名空间下,当你直接在控制器里写Storage::delete(...)时,PHP会自动在当前命名空间(也就是App\Http\Controllers)里找这个Storage类,但实际上Laravel的Storage facade是放在Illuminate\Support\Facades命名空间下的,所以系统自然找不到,就抛出了“Class 'App\Http\Controllers\Storage' not found”的错误。

至于展示图片时正常,大概率是你用了全局辅助函数(比如asset('storage/xxx'))或者通过配置文件已经做好了存储路径的映射,这些操作不需要直接调用Storage类,所以不会触发命名空间的问题。

解决方法(三种任选其一)

1. 引入Storage facade的命名空间

在控制器文件的顶部,加上这行代码,明确告诉PHP我们要用的是哪个Storage类:

use Illuminate\Support\Facades\Storage;

之后你就可以正常使用Storage::delete($path)来删除文件了。

2. 使用全局辅助函数storage()

Laravel提供了全局的storage()辅助函数,不需要引入命名空间就能直接调用,把你的删除代码改成这样:

storage()->delete('public/posts/' . $post->image);

3. 使用完全限定名调用

如果不想引入命名空间,也可以直接写Storage类的完整命名空间路径:

\Illuminate\Support\Facades\Storage::delete('public/posts/' . $post->image);

举个实际修改例子

假设你原来的删除方法代码是这样的:

public function destroy($id)
{
    $post = Post::findOrFail($id);
    // 这里报错的代码
    Storage::delete('public/posts/' . $post->image);
    $post->delete();
    return redirect()->back()->with('success', '文章删除成功');
}

用第一种方法修改后:

// 顶部引入命名空间
use Illuminate\Support\Facades\Storage;

class PostController extends Controller
{
    public function destroy($id)
    {
        $post = Post::findOrFail($id);
        Storage::delete('public/posts/' . $post->image);
        $post->delete();
        return redirect()->back()->with('success', '文章删除成功');
    }
}

这样就能正常删除对应的图片文件啦!

内容的提问来源于stack exchange,提问作者KB_Shayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:36:23