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

Laravel下载文件时出现BinaryFileResponse::withHeaders()未定义方法错误求助

问题修复:Call to undefined method BinaryFileResponse::withHeaders()

错误原因

当请求返回BinaryFileResponse(比如文件下载场景)时,这个响应类属于Symfony的HttpFoundation组件,它并没有Laravel封装的withHeaders()方法,直接调用会触发该错误。

修复方案

修改中间件的header设置逻辑,改用所有Symfony响应类都支持的headers->add()方法,兼容Laravel响应和Symfony响应场景:

修复后的中间件代码

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class XFrameHeaders
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
     */
    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);
        
        // 用Symfony响应通用的headers->add方法设置头信息
        $response->headers->add([
            'X-Frame-Options' => 'DENY',
            'X-XSS-Protection' => '1; mode=block',
            'X-Permitted-Cross-Domain-Policies' => 'master-only',
            'X-Content-Type-Options' => 'nosniff',
            'Referrer-Policy' => 'no-referrer-when-downgrade',
            'Strict-Transport-Security' => 'max-age=31536000; includeSubDomains',
            'Cache-Control' => 'no-cache, no-store, must-revalidate, post-check=0, pre-check=0',
            'Pragma' => 'no-cache',
            'Expires' => 'Sat, 26 Jul 1997 05:00:00 GMT',
        ]);
        
        return $response;
    }
}

额外说明

  • headers->add()是Symfony HttpFoundation组件中所有响应类都支持的方法,包括BinaryFileResponse和Laravel封装的Response、RedirectResponse,能覆盖所有响应场景。
  • 更新了方法注释中的返回类型声明,加入BinaryFileResponse,让类型提示更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:38