[英]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.