Php 使用laravel上载不同类型的文件

Php 使用laravel上载不同类型的文件,php,Php,我已经尝试加载文件好几天了,但都没有成功。 如果我填写表格并单击提交,请保留此错误:哎哟!您的输入有一些问题。内容必须是以下类型的文件:jpeg、png、jpg、zip、pdf。 请帮我找出我的错误。 这是我的密码: 我的看法是: <form action="{{ route('course_element.store') }}" method="POST"> @csrf

我已经尝试加载文件好几天了,但都没有成功。 如果我填写表格并单击提交,请保留此错误:哎哟!您的输入有一些问题。内容必须是以下类型的文件:jpeg、png、jpg、zip、pdf。 请帮我找出我的错误。 这是我的密码:

我的看法是:

<form action="{{ route('course_element.store') }}" method="POST">
                    @csrf
                        <div class="form-group">
                            <label for="index">Index:</label>
                            <input type="text" name="index" class="form-control" placeholder="Index">
                        </div>
                        <input type = "hidden" id = "course_id" value="{{ $course->id }}" name= "course_id">  
                        <div class="form-group">
                            <label for="format">Format</label>
                            <select class="form-control" name="format" id="format">
                                <option>Text</option>
                                <option>Image</option>
                                <option>Audio</option>
                                <option>Video</option>
                            </select>
                        </div>
                        <div class="form-group">
                        <label for="purpose">Ojectif</label>
                        <select class="form-control" name="purpose" id="purpose">
                            <option>Vocabulaire</option>
                            <option>Grammaire</option>
                            <option>Conjugaison</option>
                            <option>Prononciation</option>
                            <option>idioms</option>
                        </select>
                        </div>
                        <div class="form-group"> 
                        <label for="contenu">Contenu</label>
                        <input type="file" class="form-control-file" name="contenu" id="contenu" placeholder="Contenu" aria-describedby="fileHelpId" enctype="multipart/form-data">
                            <small id="fileHelpId" class="form-text text-muted">Help text</small>
                        </div>
                        <div class="form-group">
                            <textarea class="form-control" name="content" id="content" rows="3" placeholder="Contenu"></textarea>
                        </div>
                        <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                            <button type="submit" class="btn btn-primary">Submit</button>
                        </div>
                     </form>
“内容”字段必须包含pdf、视频、docx、图像等。这是我的控制器:

    public function store(Request $request)
    { 
        $course = $request->input('course_id');  
        $courses = Course::all();
        $request->validate([
            'index'=>'required',
            'format'=>'required',
            'purpose'=>'required',
            'contenu'=>'nullable|required|mimes: jpeg, png, jpg, zip, pdf | max: 2048',
            'content'=>'required',
            'course_id'=>'required'
        ]);
   
        Course_element::create($request->all());
        $fileName = time().'.'.$request->file->extension();  
   
        $request->file->move(public_path('storage/'), $fileName);
      
       return redirect()->route('course.show')
                       ->with('success','course element created successfully.')
                       ->with('contenu',$fileName);
    }
 
    public function show(Course_element $course_element)
    {
        //
        $courses = Course::all();
        return view ('course_element.show', compact('course_element', 'courses'));
    }
迁移:

  public function up()
    {
        Schema::create('course_element', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('index');
            $table->string('format');
            $table->string('purpose');
            $table->string('contenu');
            $table->string('content');
            $table->unsignedInteger('course_id')->nullable(); 
            $table->foreign('course_id')->references('id')->on('course')->onDelete('cascade')->onUpdate('cascade');  
            $table->softDeletes();
            $table->timestamps();

           
        });
    }

提前感谢您的帮助

嘿,据我所知,您必须将属性“enctype”添加到表单标记中,而不是输入。我试图通过将enctype添加到表单标记中来更正它,但仍然收到相同的错误!我可以通过删除像这样的空格来纠正这个错误:contenu=>'nullable | required | mimes:jpeg,png,jpg,zip,pdf | max:2048'而不是contenu'=>'nullable | required | mimes:jpeg,png,jpg,zip,pdf | max:2048'。但是我得到了另一个错误:对Null的成员函数extension()的调用我能够解决这个问题,这是必须的:$fileName=time()。$request->file('contenu')->extension()$请求->文件('contenu')->移动(公共路径('storage/'),$fileName);而不是:$fileName=time()。$request->file->extension()$请求->文件->移动(公共路径('storage/'),$fileName);谢谢你的帮助嘿,据我所知,你必须将属性“enctype”添加到表单标记中,而不是输入。我试图通过将enctype添加到表单标记中来更正它,但仍然收到相同的错误!我可以通过删除像这样的空格来纠正这个错误:contenu=>'nullable | required | mimes:jpeg,png,jpg,zip,pdf | max:2048'而不是contenu'=>'nullable | required | mimes:jpeg,png,jpg,zip,pdf | max:2048'。但是我得到了另一个错误:对Null的成员函数extension()的调用我能够解决这个问题,这是必须的:$fileName=time()。$request->file('contenu')->extension()$请求->文件('contenu')->移动(公共路径('storage/'),$fileName);而不是:$fileName=time()。$request->file->extension()$请求->文件->移动(公共路径('storage/'),$fileName);谢谢你的帮助
  public function up()
    {
        Schema::create('course_element', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('index');
            $table->string('format');
            $table->string('purpose');
            $table->string('contenu');
            $table->string('content');
            $table->unsignedInteger('course_id')->nullable(); 
            $table->foreign('course_id')->references('id')->on('course')->onDelete('cascade')->onUpdate('cascade');  
            $table->softDeletes();
            $table->timestamps();

           
        });
    }