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

时间:2017-02-16 08:54:31

标签: php laravel laravel-5.3

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

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

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

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

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

现在我想存储用户提供的外部网址中的文件。 假设该文件具有jpg格式,并且我希望将其存储在具有唯一名称的用户目录的photo目录中。因为我写了这个:

Storage::disk('user')->putFile('photos', fopen($photo, 'r'));

但是当我运行代码时出现了这个错误:

Call to a member function hashName() on string

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

1 个答案:

答案 0 :(得分:3)

根据documentation,你可以使用:

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

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

Storage::disk('user')->put('file.jpg', file_get_contents($photo));