Laravel:如何为外部文件创建下载响应



我知道已经有关于使用Laravel下载文件的问题,但我发现的只是处理本地文件。

所以,通常情况下,我会做这样的事情:

$path = storage_path().'/my-file.pdf';
$name = 'new-name.pdf';
$headers = '....';
return response()->download($path, $name, $headers);

但是,当我需要下载的文件是外部文件时,我该怎么办www.my-storage.net/files/123/my-file.pdf

我可以使用copy((函数,或者file_get_contents((和Laravel的存储::p ut((的组合,但我不想在每次处理下载时都在本地(和临时(存储文件。相反,我想直接通过用户的浏览器下载外部文件。

在普通的PHP中,它将是这样的。但。。。

(1( 我如何准备这样的Laravel下载响应?

(2( 如何确保Laravel解决方案保持高效(例如,没有内存泄漏(?

类似以下内容的方法将起作用:

 return response()->stream(function () {
      //Can add logic to chunk the file here if you want but the point is to stream data
      readfile("remote file");
 },200, [ "Content-Type" => "application/pdf", 
          "Content-Length" => "optionally add this if you know it", 
           "Content-Disposition" => "attachment; filename="filename.pdf"" 
]);

这通过使用Symphony的StreamedResponse工作

最新更新