了解文件存储和保护内容Laravel 5

了解文件存储和保护内容Laravel 5,laravel,laravel-5,laravel-storage,Laravel,Laravel 5,Laravel Storage,我需要帮助了解Laravel的文件存储系统。我正在创建一个需要上传用户驾照照片的应用程序。这显然是敏感信息。我想保持这个图像远离互联网,除非管理员正在查看它。我的理解是,我必须将内容保存到“存储>应用>公用”中的公用目录,并创建指向“公用>存储”文件夹的符号链接。我已经完成了,它工作得很好。我保存到数据库的路径,程序可以显示它,但是如果可以避免的话,我不想把东西放在公用文件夹中 是否有办法将图像/文件保存到存储系统中的专用文件夹中,然后通过视图进行访问?如果我这样做,它是否会将该图像保持为“私有

我需要帮助了解Laravel的文件存储系统。我正在创建一个需要上传用户驾照照片的应用程序。这显然是敏感信息。我想保持这个图像远离互联网,除非管理员正在查看它。我的理解是,我必须将内容保存到“存储>应用>公用”中的公用目录,并创建指向“公用>存储”文件夹的符号链接。我已经完成了,它工作得很好。我保存到数据库的路径,程序可以显示它,但是如果可以避免的话,我不想把东西放在公用文件夹中

是否有办法将图像/文件保存到存储系统中的专用文件夹中,然后通过视图进行访问?如果我这样做,它是否会将该图像保持为“私有”的,这样它就不会存储在缓存中,而不会存储在“公共”文件夹中?符号链接是以我想要的方式保护存储文件夹中的文件,还是真正使所有文件都可供公众使用


理解这一点的任何帮助都将不胜感激。

您所说的是正确的
存储/app/public
中的文件是公共的。这就是为什么你必须创建一个私有目录,比如说
storage/app/private
,然后在这里上传你的敏感文件

您可能需要在
config/filesystems.php
中添加一个磁盘:

'private' => [
    'driver' => 'local',
    'root' => storage_path('app/private'),
],
如果你想访问你的私人文件。为此创建路由:

Route::get('/private-files/{file?}','FileController@get')->where('file', '(.*)');
然后在
FileController.php
中,您将看到类似的内容(这只是一个示例,在此处编辑代码以检查用户是否为管理员):


这是一个非常彻底的答案。非常感谢你。我唯一的另一个问题是如何在视图中访问它?例如,传统的方法是只放置一个带有src=path/to/file的img标记。我如何通过使用像这样的控制器函数来执行同样的操作并将源分配给该图像?我的视图由一个单独的控制器和一个单独的函数返回。这就是为什么我在回答中创建了路由。所以,如果你想把它放在图像标签中,这是代码:
啊哈,我明白了。非常感谢。我看到的另一个答案是,我可以使用存储门面…src=“{{Storage::($object->path)}”,这也是您建议的一个好选项吗?这不会起作用,因为
src
需要URL路径。
Storage::disk('private')->get($file)
将返回文件的内容,而不是URL。非常感谢。这是很多很好的信息,可以帮助我更好地理解我的代码。干得好,非常感谢。我很感谢您花时间实际键入代码片段,以帮助我查看您的解决方案
<?php
namespace App\Http\Controllers;

use Auth;
use Storage;
use App\Http\Controllers\Controller;

class FileController extends Controller {

    public function __construct()
    {
        $this->middleware('auth');
    }

    public function get($file)
    {
        return Storage::disk('private')->get($file);
    }

 }