【问题标题】:Image file not being stored in laravel project图像文件未存储在 laravel 项目中
【发布时间】:2018-02-22 21:21:45
【问题描述】:

大家好,我需要你们的帮助。我正在创建一个 laravel 项目,我在其中修改了默认的 users 表以存储用户的更多信息,例如 name用户图像文件名称。因此我不得不修改 'create' 函数已修改的 'RegisterController' 类,并且我还添加了一个 'update' 方法存储上传的图像文件。下面是我的“RegisterController”类代码:

    protected function update(array $data)
{
    $path = $data['img']->storeAs('/public','ohgod  ');
    return $path;
}


protected function create(array $data)
{

    $filename;


        $filename = $data['img']->getClientOriginalName();
        $filesize = $data['img']->getClientSize();
        $this->update($data);


    return User::create([
        'name' => $data['name'],
        'img_name' => $filename,
        'img_size' => $filesize,
        'username' => $data['username'],
        'dob' => $data['dob'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}

有了这个,我还必须修改 form 以获取用户的添加信息。现在,当我注册为新用户时。我在 users 表中的所有内容都正确,但 图像文件未存储在服务器中

我是 laravel 的新手,所以我不知道我的代码有什么问题。我也没有收到任何错误消息。所以帮帮我吧。

我从laravel官网https://laravel.com/docs/5.5/filesystem得到文件存储代码

【问题讨论】:

    标签: php database image laravel


    【解决方案1】:

    在插入数据库之前,您已将图像移动到文件夹

     $destinationPath='images';
           $filename = $data['img']->getClientOriginalName();
    
            //move iamge to folder
            $fileName = str_random(30).'.'.$data['img']->clientExtension();
            $data['img']->move($destinationPath, $fileName);
    

    移动的文件将在 public/images 文件夹中可用

    【讨论】:

    • 对不起它没有工作它说 undefined varialble $file
    • 改成$fileName
    • 它说 Call to a member function move() on string
    • 修改 $fileName->move($destinationPath, $fileName); 后生效到 $data['img']->move($destinationPath, $fileName);
    【解决方案2】:
    $image = time().'.'.$data['img']->getClientOriginalExtension();
    

    $data['img']->move(public_path('images'), $image);

    在发送到数据库之前将图像存储在公共图像文件夹中的最佳方式。

    【讨论】:

      【解决方案3】:

      如果您使用的是laravel 表单,请使用

      {!! Form::open(['url' => url('background'), `'files'=>true,` 'method' => 'post', 'class' => 'form-horizontal']) !!}
      

      如果您使用的是简单的 html 表单,请使用以下代码

      <form enctype="multipart/form-data"><form>
      

      我希望它对你有用。

      【讨论】:

        【解决方案4】:

        您可以转到 Illuminate\Foundation\Auth\RegistersUsers trait 并将您的图像代码放入 register 方法中

        public function register(Request $request)
        {
            $this->validator($request->all())->validate();
            $fields = $request->all();
            if ($request->hasFile('avatar'))
                $fields['avatar'] = $request->avatar->store('users', ['disk' => 'public']);
        
            $user = $this->create($fields);
        
            event(new Registered($user));
        
            $this->guard()->login($user);
        
            return $this->registered($request, $user)
                ?: redirect($this->redirectPath());
        }
        

        然后转到 App\Http\Controllers\Auth\RegisterController 并在 create 方法中将图像附加到数据数组中

        protected function create(array $data)
        {
        
            return User::create([
                'name' => $data['name'],
                'username' => $data['username'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
                'avatar' => $data['avatar'],
                'headline' => $data['headline'],
                'summary' => $data['summary'],
            ]);
        }
        

        【讨论】:

        • 此解决方案是否将图像保存在数据库和服务器公用文件夹中。因为我想保存图像,只在公共文件夹中为上传的图像提供一个唯一的名称。在数据库中,我只想保存图像名称和大小而不是图像本身。
        • 这个尺寸将图片路径保存在数据库中,您可以在 register 方法中检测图像大小并保存到 fields 数组并在 create 方法中从 data 数组中访问它们
        • 谢谢先生。这是迄今为止我得到的最好的方法。
        猜你喜欢
        • 2019-11-16
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2020-10-11
        • 2020-12-10
        • 2018-10-27
        相关资源
        最近更新 更多