将文件上传到 laravel fortify 数据库

问题描述

我是 laravel 的新手,我正在尝试使用 fortify 创建一个简单的注册表单。问题是我试图在同一个表单上上传一个文件,我正在努力弄清楚如何在同一个控制器中做到这一点。我在数据库上为文件添加一个 varchar 类型的额外列。当我尝试提交表单时,它一直给我一个错误:“BadMethodCallException 方法 Illuminate\Http\UploadedFile::file 不存在。” 我不知道如何使这项工作。请帮忙。

形式:

<form class="multisteps-form__form" id="wizard" enctype="multipart/form-data" method="POST" action="{{route('register')}}">
@csrf
<div class="step-content-field">
        
    <div class="form-inner-area">
        <label>First Name:</label>
        <input type="text" name="firstname" id="firstname" class="form-control "  placeholder="First Name" required>
        <div class="text-danger error" data-error="firstname"></div>
    </div>
    
    <br>
    <div class="form-inner-area">
        <label>Last Name:</label>
        <input type="text" name="lastname" id="lastname" class="form-control "  placeholder="Last Name" required>
        <div class="text-danger error" data-error="lastname"></div>
    </div>
    
    <div class="form-inner-area">
        <label>Email:</label>
        <input type="text" name="email" class="form-control "  id="email" placeholder="Email" required>
        <div class="text-danger error" data-error="email"></div>
    </div>
    
    <div class="form-inner-area">
        <label>Mobile:</label>
        <input type="text" name="mobile" class="form-control " id="mobile" placeholder="Mobile" required>
        <div class="text-danger error" data-error="mobile"></div>
    </div>
    
    <div class="form-inner-area">
        <label>Country:</label>
        <input type="text" name="country" class="form-control "  id="country" placeholder="Country" required>
        <div class="text-danger error" data-error="country"></div>
    </div>
    
    <div class="form-inner-area">
        <label>Password:</label>
        <input type="password" name="password" class="form-control "  id="password" placeholder="Password" required>
    </div>
    
    <div class="form-inner-area">
        <label>Confirm password:</label>
        <input type="password" name="password_confirmation" class="form-control"  id="password_confirm" placeholder="Confirm password" required>
        
    </div>
    <span>The password must be at least 8 characters and contain at least one uppercase character,one number,and one special character.</span>
      <input type="file" name="db_upload" id="upload" class="upload-Box" placeholder="Upload csv File">
    </div>
</form>

这是 CreateNewUser 控制器:

namespace App\Actions\Fortify;

use App\Models\User;
use App\Models\Order;
use App\Notifications\WelcomeEmailNotification;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Request;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;

    public function create(array $input)
    {
        Validator::make($input,[
           
            'firstname' => ['required','string','max:255'],'lastname' => ['required','email' => [
                'required','email','max:255',Rule::unique(User::class),],'mobile' => ['required','int'],'country' => ['required','password' => $this->passwordRules(),'db_upload' => 'required|mimes:csv,txt,xlx,xls,pdf|max:2048',])->validate();

           //File upload
            if($input['db_upload']->file()) {

                $file = $input['db_upload']->file('db_upload');
            
                $fileName = $file->getClientOriginalName();
                $destinationPath = public_path().'/uploads' ;
                $file->move($destinationPath,$fileName);
            }
        
            $user = User::create([
            'firstname' => $input['firstname'],'lastname' => $input['lastname'],'email' => $input['email'],'mobile' => $input['mobile'],'country' => $input['email'],'password' => Hash::make($input['password']),'db_upload' => $file,]);

            $user->notify(new WelcomeEmailNotification());

                return $user;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)