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

max*_*127 3 laravel laravel-5 laravel-storage

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

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

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

ace*_*777 9

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

您可能想在您的config/filesystems.php:

'private' => [
    'driver' => 'local',
    'root' => storage_path('app/private'),
],
Run Code Online (Sandbox Code Playgroud)

如果您想访问您的私人文件。为此创建一个路由:

Route::get('/private-files/{file?}','FileController@get')->where('file', '(.*)');
Run Code Online (Sandbox Code Playgroud)

然后在 中FileController.php,您将有这样的内容(这只是一个示例,请在此处编辑代码以检查用户是否为管理员):

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

 }
Run Code Online (Sandbox Code Playgroud)

  • 这就是我在答案中创建路线的原因。因此,如果您想将其放入图像标签中,请使用以下代码:`&lt;img src="{{ url('private-files/file.png') }}" /&gt;` (2认同)