繁体   English   中英

Laravel 从服务器上的任何路径提供文件,就好像它在公共文件夹中一样

[英]Laravel serve file from any path on server as if it was in the public folder

我希望能够提供一个文件,该文件位于服务器文件系统上 PHP/Apache 有权读取的任何路径,就好像它在 Laravel 的public文件夹中一样。

假设我的服务器上有一个本地目录/var/directory/ ,其中包含两个文件:

  • /var/directory/abc.jpg
  • /var/directory/xyz.jpg

现在,如何通过以下方式访问这些文件:

  • https://example.com/media/abc.jpg
  • https://example.com/media/xyz.jpg

我想我需要一个控制器来处理/media/{filename}路由。 然后检查该文件是否存在于磁盘上的/var/directory/并将其读入 PHP 是相当直接的。

所以真正的问题是:我如何有效地读取这些文件,然后将它们作为对 get 请求的响应? 该解决方案应尽可能高效,以便它适用于较大的文件(10 到 100 MB)。

我自己想出来的。 我必须说,解决方案非常简单。

我在数据库中索引了所有文件,所以我可以使用路由模型绑定。 如果您不是这种情况,则需要手动查找该文件是否存在于磁盘上。

Route::get('/media/{file:id}', FileDownloadController::class);

然后,只需要:

public function __invoke(File $file)
{
    return response()->file($file->path);
}

或者,如果应该提出下载提示:

public function __invoke(File $file)
{
    return response()->download($file->path);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM