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

Laravel 8 如何删除storage文件夹内的课程PDF文件

问题排查及修复方案

核心问题点

  • 拼接文件路径时错误使用了$lesson模型对象,没有指定存储PDF文件名的lesson_pdf字段,生成的路径完全错误,自然找不到目标文件
  • $image_path变量没有赋值就直接用于文件存在性判断,判断逻辑永远不生效,对应的删除代码不会执行
  • 没有做文件存在判断就直接调用unlink,如果路径错误会直接抛出PHP错误
  • 重复声明了namespace App\Http\Controllers;命名空间(虽然不影响删除逻辑,但属于冗余代码,建议删除)

修复后的控制器DeletePDF方法

public function DeletePDF($id)
{    
    $lesson = LessonPDF::find($id);
    if(is_null($lesson)){
        return response()->json('Record not found!', 404);
    }
    // 先判断字段是否为空,避免删除空路径
    if (!empty($lesson->lesson_pdf)) {
        $filePath = 'public/uploads/' . $lesson->lesson_pdf;
        // 用Laravel自带的Storage门面处理删除,不需要手动拼接系统路径,兼容性更好
        if (Storage::exists($filePath)) {
            Storage::delete($filePath);
        }
    }
    $lesson->update(['lesson_pdf' => null]);
    return response('PDF Deleted', 200);
}

额外说明

  • 原来注释的Storage::delete逻辑本身是正确的,只需要补全文件路径前缀即可,比手动调用unlink更符合Laravel的编码规范,也能避免不同操作系统路径分隔符的差异问题
  • 如果后续需要支持切换存储驱动(比如改存到OSS、S3等对象存储),用Storage门面不需要修改业务逻辑,兼容性更好
  • 原代码里返回记录不存在的状态码用了401(未授权),修复后改成了更符合语义的404(资源不存在)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:06:03