我已经在 Laravel 存储中上传了用户的头像。如何访问它们并将它们呈现在视图中?
服务器将所有请求指向/public,那么如果它们在文件夹中,我该如何显示它们/storage?
/public
/storage
最好 的方法是创建一个像@SlateEntropy 这样的 符号链接,在下面的答案中很好地指出了这一点。为了帮助解决这个问题,从 5.3 版本开始,Laravel包含一个命令,这使得这非常容易做到:
php artisan storage:link
这将为您创建一个从public/storageto的符号链接,storage/app/public这就是它的全部内容。现在/storage/app/public可以通过以下链接访问其中的任何文件:
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; });
您现在可以像拥有符号链接一样访问文件:
如果您使用的是干预图像库,则可以使用其内置response方法使事情更简洁:
response
Route::get('storage/{filename}', function ($filename) { return Image::make(storage_path('public/' . $filename))->response(); });
警告 请记住,通过 手动提供 文件会导致 性能损失 ,因为您要经历整个 Laravel 请求生命周期才能读取和发送文件内容,这比让 HTTP 服务器处理它 要慢得多。
警告
请记住,通过 手动提供 文件会导致 性能损失 ,因为您要经历整个 Laravel 请求生命周期才能读取和发送文件内容,这比让 HTTP 服务器处理它 要慢得多。