我把用户的头像上传到了Laravel存储器里。我如何访问它们并在视图中呈现它们?

服务器将所有请求指向/public,那么如果它们在/storage文件夹中,我如何显示它们?


当前回答

无站点名称

{{Storage::url($photoLink)}}

如果你想添加网站名称 附加在api JSON felids上的例子

 public function getPhotoFullLinkAttribute()
{
 Storage::url($this->attributes['avatar']) ;
}

其他回答

如果你正在使用php,那么请使用php符号链接函数,如下所示:

symlink (' / home / spedfy projectname / storage / home app,为',/ / spedfy / public_html storage’)

将用户名和项目名更改为正确的名称。

对我来说,它与子文件夹路由一起工作

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;
});

如果磁盘“本地”不适合你,那么试试这个:

将'default' => env('FILESYSTEM_DRIVER', 'public')中的local更改为public, from project_folder/config/ filessystem .php 清除配置缓存php工匠配置:清除 然后创建sym link php artisan storage:link

要获取上传图像的url,您可以使用这个Storage::url('image_name.jpg');

最好将所有私有图像和文档保存在存储目录中,然后您将完全控制文件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上测试的。

首先,您需要使用artisan命令为存储目录创建一个符号链接

php artisan storage:link

然后在任何视图中,你都可以像这样通过url helper访问你的图像。

url('storage/avatars/image.png');