Laravel 5 - 如何访问在 View 中存储中上传的图像?
我已经在Laravel存储中上传了用户的头像。如何访问它们并在视图中呈现它们?
服务器将所有请求指向 ,那么如果它们在文件夹中,我该如何显示它们?/public
/storage
我已经在Laravel存储中上传了用户的头像。如何访问它们并在视图中呈现它们?
服务器将所有请求指向 ,那么如果它们在文件夹中,我该如何显示它们?/public
/storage
最好的方法是创建一个符号链接,就像@SlateEntropy在下面的答案中很好地指出的那样。为了帮助解决这个问题,从版本5.3开始,Laravel包含一个命令,使这变得非常容易:
php artisan storage:link
这为您创建了一个从 到 的符号链接,这就是它的全部内容。现在,可以通过以下链接访问 中的任何文件:public/storage
storage/app/public
/storage/app/public
http://somedomain.com/storage/image.jpg
如果出于任何原因,您无法创建符号链接(也许您正在共享主机等上),或者您想在某些访问控制逻辑后面保护某些文件,则可以选择使用特殊路由来读取和服务图像。例如,像这样的简单闭包路由:
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
您现在可以像访问符号链接一样访问文件:
http://somedomain.com/storage/image.jpg
如果您使用的是干预图像库,则可以使用其内置方法来使内容更加简洁:response
Route::get('storage/{filename}', function ($filename)
{
return Image::make(storage_path('public/' . $filename))->response();
});
警告
请记住,通过手动提供文件,您将受到性能损失,因为您将经历整个Laravel请求生命周期以读取和发送文件内容,这比让HTTP服务器处理它要慢得多。
一种选择是在存储目录和公共目录的子文件夹之间创建符号链接。
例如
ln -s /path/to/laravel/storage/avatars /path/to/laravel/public/avatars
这也是 Envoyer 使用的方法,Envoyer 是由 Laravel 的开发人员 Taylor Otwell 构建的部署管理器。