"The Response callback must not be null" 尝试在 Laravel 7 中发送 PDF 文件下载时
"The Response callback must not be null" when trying to send a PDF file download in Laravel 7
在我的 Laravel 7 应用程序中,我有一个动态生成 PDF 的路径,我希望浏览器将其视为文件下载。
在撰写本文时,我发现了一些关于 Laravel 使用保存在文件系统上的文件提供文件下载服务的文档和问题,但就我而言,我不想将 pdf 存储在文件系统。我只是想在用户点击路由的时候动态生成,然后浏览器下载pdf。
我正在使用 mpdf 库,它似乎可以正确地形成 pdf 文件。但是,Laravel 抛出 The Response callback must not be null
LogicException。在浏览器中,我看到显示了 PDF 的数据,然后是异常堆栈跟踪。
控制器方法如下:
public function pdf($id) {
$manual = new \App\manual($id);
$contents = view('admin.manual')->with($manual)->render();
$mpdf = New \Mpdf\Mpdf();
$mpdf->WriteHtml($contents);
$pdf = $mpdf->output();
return response()->streamDownload($pdf, 'manual.pdf');
}
在此屏幕截图中,您可以看到 PDF 文件的数据,它告诉我它正在生成和交付:
但是异常发生在PDF对象的EOF之后:
我从 Symfony 找到了 this 5-year-old issue 相同的异常消息,但似乎早就解决了。我没有发现与 Laravel 7.
有关的任何其他内容
如何在 Laravel 7 中正确指定数据的 pdf 文件下载?
我能够通过使用宏并指定 headers 来获得所需的行为。
return response()->streamDownload(
function() use ($pdf) { echo $pdf; } ,
'manual.pdf',
['Content-type'=>'application/pdf']
);
我一直在努力解决同样的问题,并使用上面的 post 解决了它。但是在 Lumen 8 中,我需要将 streamDownload 更改为流。
这是我的代码:
$stream = $mpdf->Output($filename, "I");
return response()->stream(function() use ($stream) { echo $stream; }, 200, ['Content-type'=>'application/pdf']);
在我的 Laravel 7 应用程序中,我有一个动态生成 PDF 的路径,我希望浏览器将其视为文件下载。
在撰写本文时,我发现了一些关于 Laravel 使用保存在文件系统上的文件提供文件下载服务的文档和问题,但就我而言,我不想将 pdf 存储在文件系统。我只是想在用户点击路由的时候动态生成,然后浏览器下载pdf。
我正在使用 mpdf 库,它似乎可以正确地形成 pdf 文件。但是,Laravel 抛出 The Response callback must not be null
LogicException。在浏览器中,我看到显示了 PDF 的数据,然后是异常堆栈跟踪。
控制器方法如下:
public function pdf($id) {
$manual = new \App\manual($id);
$contents = view('admin.manual')->with($manual)->render();
$mpdf = New \Mpdf\Mpdf();
$mpdf->WriteHtml($contents);
$pdf = $mpdf->output();
return response()->streamDownload($pdf, 'manual.pdf');
}
在此屏幕截图中,您可以看到 PDF 文件的数据,它告诉我它正在生成和交付:
但是异常发生在PDF对象的EOF之后:
我从 Symfony 找到了 this 5-year-old issue 相同的异常消息,但似乎早就解决了。我没有发现与 Laravel 7.
有关的任何其他内容如何在 Laravel 7 中正确指定数据的 pdf 文件下载?
我能够通过使用宏并指定 headers 来获得所需的行为。
return response()->streamDownload(
function() use ($pdf) { echo $pdf; } ,
'manual.pdf',
['Content-type'=>'application/pdf']
);
我一直在努力解决同样的问题,并使用上面的 post 解决了它。但是在 Lumen 8 中,我需要将 streamDownload 更改为流。
这是我的代码:
$stream = $mpdf->Output($filename, "I");
return response()->stream(function() use ($stream) { echo $stream; }, 200, ['Content-type'=>'application/pdf']);