使用putFile()通过URL存储文件时,在字符串错误时调用成员函数hashName()

A.B*_*per 5 php laravel laravel-5.3

我正在使用一种API,用户可以发送文件url将其下载到其名称与用户名相同的特定文件夹中。

首先,我将新磁盘选项添加到名为的文件系统配置中user,该文件具有与经过身份验证的用户名相同的特定目录。像这样:

    'disks' => [
        'user' => [
            'driver' => 'local',
            'root'   => NULL, //set on the fly after user authentication. (LogAuthenticated.php)
        ],
        'local' => [
            'driver' => 'local',
            'root'   => public_path('files'),
        ]
    ]
Run Code Online (Sandbox Code Playgroud)

当用户进行身份验证时,我在Illuminate\Auth\Events\Authenticated事件的侦听器上创建一个与身份验证的用户名相同的目录,并设置filesystems.disks.user.rootconfig,如下所示:

    public function handle (Authenticated $event)
    {
        $username = $event->user->username;

        if (!Storage::exists($username)) {
            Storage::makeDirectory($username, 0775);
        }
        Config::set('filesystems.disks.user.root', public_path('files/' . $username));
    }
Run Code Online (Sandbox Code Playgroud)

现在,我想从用户提供的外部URL存储文件。假设该文件具有jpg格式,我想photo使用唯一的名称将其存储在用户Directory的目录中。为此我写了这个:

Storage::disk('user')->putFile('photos', fopen($photo, 'r'));
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时出现此错误:

Call to a member function hashName() on string
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么错误,为什么会发生。如果有人知道,请帮助我。

rap*_*2-h 6

根据文档,您可以使用:

Storage::disk('user')->putFile('photos', new \Illuminate\Http\File($photo));
Run Code Online (Sandbox Code Playgroud)

如果照片是网址,您可以尝试:

Storage::disk('user')->put('file.jpg', file_get_contents($photo));
Run Code Online (Sandbox Code Playgroud)