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

Laravel7下载已上传文件时出现404页面不存在错误是什么原因?

报错原因

  • 路由路径与前端跳转路径不匹配。web.php中定义的下载路由是/download/{file},但前端a标签的href写为/detalles-tickets/download/{{ $detalleTicket->file }},路径前缀多了detalles-tickets段,访问地址和注册的路由无法匹配,直接触发404。
  • 文件读写逻辑存在隐患。你直接使用相对路径storage/读写文件,Laravel运行时会基于入口文件public/index.php的位置解析路径,如果没有正确创建存储软链接、或者public/storage目录权限不足,也会在下载阶段找不到文件返回404。

解决方案

  1. 修正路由与前端路径的匹配问题,二选一即可:
    • 方案一:修改web.php的路由定义,补充对应的路径前缀:
    Route::get('/detalles-tickets/download/{file}', 'Backend\DetalleTicketController@download')->name('detalles-tickets.download');
    
    • 方案二:前端直接用路由名称生成访问地址,避免手动写路径出错:
    <a title="Download" id="download" class="btn btn-sm btn-success"
        href="{{ route('detalles-tickets.download', $detalleTicket->file) }}">
        <i class="fa fa-download"></i>
    </a>
    
  2. 优化文件读写逻辑,避免相对路径解析问题:
    • 先执行Laravel默认的存储软链接创建命令:php artisan storage:link
    • 调整store方法的存储逻辑,使用Laravel自带的存储门面操作:
    public function store(Request $request){
        $detalleTicket = new DetalleTicket();
        if($request->file('file')){
            $file = $request->file('file');
            $filename = time().'.'.$file->getClientOriginalName();
            $file->storeAs('public', $filename);
            $detalleTicket->file = $filename;
        }      
        $detalleTicket->save();
        Session::flash('success');
        return redirect()->route('detalles-tickets.view');
    }
    
    • 调整download方法的文件读取逻辑:
    public function download($file){
        return Storage::download('public/'.$file);
    }
    
  3. 确认public/storage目录的读写权限正常,web运行用户拥有该目录的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:30:00