Laravel 5 – 如何访问视图中的存储上传的图像?

我有用户的头像上传到Laravel存储。 我怎样才能访问它们并在视图中渲染它们?

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

最好的方法是创build一个像@SlateEntropy这样的符号链接 ,在下面的答案中非常好的指出。 为了帮助解决这个问题,从5.3版开始,Laravel提供了一个令人难以置信的简单命令 :

 php artisan storage:link 

这为您创build了从public/storagestorage/app/public的符号链接,这就是它的全部。 现在/storage/app/public任何文件都可以通过如下链接访问:

 http://somedomain.com/storage/image.jpg 

如果出于任何原因,你不能创build符号链接(也许你在共享主机等),或者你想保护一些访问控制逻辑背后的文件,有一个特殊的路线读取和为图像服务。 例如这样一个简单的closures路由:

 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服务器处理文件得多。

一种select是在存储目录中的子文件夹和公共目录之间创build一个符号链接。

例如

 ln -s /path/to/laravel/storage/avatars /path/to/laravel/public/avatars 

这也是由Laravel的开发人员Taylor Otwellbuild立的部署经理Envoyer使用的方法。

如果你在windows上,你可以在cmd上运行这个命令:

 mklink /j /path/to/laravel/public/avatars /path/to/laravel/storage/avatars 

来自: http : //www.sevenforums.com/tutorials/278262-mklink-create-use-links-windows.html

根据Laravel 5.2文档,您可公开访问的文件应放在目录中

 storage/app/public 

为了使他们可以从networking访问,你应该创build一个从public/storagestorage/app/public的符号链接。

 ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage 

现在,您可以使用资产助手在您的视图中创build文件的URL:

 echo asset('storage/file.txt'); 

如果你的php只是使用php syslink函数symlink('/home/username/projectname/storage/app/public', '/home/username/public_html/storage')

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

将所有私人图像和文档保存到存储目录是一件好事,那么您将完全控制文件以太网,您可以允许特定types的用户访问文件或进行限制。

在laravel上testing5.4制作路线/文档并指向任何控制器方法

  public function docs(){ // any custom logic //check if user is logged in or user have permission to download this file etc $headers = [ 'Content-Type' => 'image/png', ]; return response()->download(storage_path('app/users/documents/4YPa0bl0L01ey2jO2CTVzlfuBcrNyHE2TV8xakPk.png'), 'filename.png', $headers); } 

当你打到localhost时:8000 / docs文件将被下载,如果有的话

根据上面的代码,文件必须位于root / storage / app / users / documents目录下