我正在开发一个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
我不知道这个错误是什么以及为什么会发生。如果有人知道请帮助我。
答案 0 :(得分:3)
根据documentation,你可以使用:
Storage::disk('user')->putFile('photos', new \Illuminate\Http\File($photo));
如果照片是网址,您可以尝试:
Storage::disk('user')->put('file.jpg', file_get_contents($photo));