我把用户的头像上传到了Laravel存储器里。我如何访问它们并在视图中呈现它们?
服务器将所有请求指向/public,那么如果它们在/storage文件夹中,我如何显示它们?
我把用户的头像上传到了Laravel存储器里。我如何访问它们并在视图中呈现它们?
服务器将所有请求指向/public,那么如果它们在/storage文件夹中,我如何显示它们?
当前回答
根据Laravel 5.2文档,你的公共可访问文件应该放在目录中
storage/app/public
为了使它们可以从web上访问,你应该创建一个从public/storage到storage/app/public的符号链接。
ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage
现在你可以在你的视图中使用资产助手创建一个指向文件的URL:
echo asset('storage/file.txt');
其他回答
你可以在控制台中运行这个命令来创建链接:
php artisan storage:link
对我来说,它与子文件夹路由一起工作
Route::get('/storage/{folder}/{filename}', function ($folder,$filename)
{
$path = storage_path('app/public/' .$folder.'/'. $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;
});
最好将所有私有图像和文档保存在存储目录中,然后您将完全控制文件ether,您可以允许特定类型的用户访问文件或限制。
创建一个route/docs并指向任意控制器方法:
public function docs() {
//custom logic
//check if user is logged in or user have permission to download this file etc
return response()->download(
storage_path('app/users/documents/4YPa0bl0L01ey2jO2CTVzlfuBcrNyHE2TV8xakPk.png'),
'filename.png',
['Content-Type' => 'image/png']
);
}
当你点击localhost:8000/docs文件时,如果存在的话,文件将被下载。
根据上面的代码,文件必须在root/storage/app/users/documents目录下,这是在Laravel 5.4上测试的。
根据Laravel 5.2文档,你的公共可访问文件应该放在目录中
storage/app/public
为了使它们可以从web上访问,你应该创建一个从public/storage到storage/app/public的符号链接。
ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage
现在你可以在你的视图中使用资产助手创建一个指向文件的URL:
echo asset('storage/file.txt');
首先,您需要使用artisan命令为存储目录创建一个符号链接
php artisan storage:link
然后在任何视图中,你都可以像这样通过url helper访问你的图像。
url('storage/avatars/image.png');