Laravel9下载PDF提示文件不存在但文件实际存在如何解决
问题原因
response()->download() 是Laravel提供的本地文件下载响应方法,入参要求传入服务器上文件的真实物理路径。你代码里用url()生成的是HTTP协议的网络访问地址,框架会把这个HTTP字符串直接当作本地文件路径去检索,自然找不到对应文件,哪怕文件实际存放在对应目录也会触发不存在的报错。
修复步骤
- 修改控制器下载逻辑,用
public_path()辅助函数获取public目录下文件的真实本地路径,替换原来的url()调用,建议额外增加文件存在校验避免异常:
public function download(){ $document = Documents::first(); $absolutePath = public_path('uploads/documents/' . $document->filename); if (!file_exists($absolutePath)) { abort(404, '请求的文件不存在'); } return response()->download($absolutePath); }
- 修正视图里的拼写错误:a标签的target属性正确值为
_blank,你写的_blanck多了一个字母c,会导致新窗口打开逻辑失效,修正后视图代码:
<li><a href="{{route('front.download')}}" target="_blank">Download PDF</a></li>
内容的提问来源于stack exchange,提问作者jhon jhon
相关产品推荐
相关产品推荐

