首页 > 解决方案 > 使用 laravel 将更多文件上传到文件夹

问题描述

我尝试使用 laravel 将多个文件上传到特定文件夹。我只用一个文件就能做到这一点。但是在我尝试上传多个文件后它不起作用。首先,我尝试制作一个 foreach。但它不起作用我试图在互联网上找到解决方案,但不幸的是我没有找到。有谁能够帮助我?

public function store(Request $request) {
  // dd(request()->all());

  $this->validate(request(), [
    'name' => 'required|unique:lessons|max:20',
    'type' => 'required',
    'description' => 'required',
    'price' => 'required',
    'main_picture' => 'required',
    'pictures' => 'required'
  ]);

    $input = $request->all();
    $images= array();

    if($files=$request->file('images')){
      foreach($files as $file){
        $name=$file->getClientOriginalName();
        $file->move('lesson images',$name);
        $images[]=$name;
      }
    }

    $lesson = Lesson::create( [
      'name' =>$input['name'],
      'type' => $input['type'],
      'description' =>$input['description'],
      'price' => $input['price'],
      'main_picture' =>$input['main_picture'],
      'pictures'=>  implode("|",$images),
    ]);

    $image_name = $request->file('main_picture')->getClientOriginalName();

    $id = $lesson->id;


    if($request->hasFile('main_picture')) {
      $file = $request->file('main_picture');
      $file->move('lesson images', $id . "-main-" . $image_name);
    }

    return redirect('/lessenoverzicht');

}

HTML:

        <form method="post" enctype="multipart/form-data" action="/lessenoverzicht/toevoegen">
       {{ csrf_field() }}
    <div class="form-group">
      <label for="name"><span class='required'>*</span>Naam les:</label>
      <input type="text" class="form-control" id="name" name="name" placeholder="Voer naam les in..">
    </div>

    <div class="form-group">
      <label for="exampleFormControlSelect1"><span class='required'>*</span>Type</label>
      <select name='type' class="form-control" id="type">
        <option value="" disabled selected>Select your option</option>
        <option value='les'>Les</option>
        <option value='workshop'>Workshop</option>
      </select>
    </div>

    <div class="form-group">
      <label for="description"><span class='required'>*</span>Omschrijving:</label>
      <textarea class="form-control" id="description" name="description" rows="10" placeholder="Voer omschrijving in..."></textarea>
    </div>

    <label for="description"><span class='required'>*</span>Prijs:</label>
    <div class="input-group mb-3">

      <div class="input-group-prepend">
        <span class="input-group-text" id="basic-addon1">€&lt;/span>
      </div>
      <input type="number" value="0.00" min="0" step="1.00" class="form-control" id='price' name='price'>
    </div>

    <div class="form-group">
      <label for="main_picture"><span class='required'>*</span>Main Image:</label>
      <input type="file" class='form-control' id='main_picture' name="main_picture">
    </div>
    <div class="form-group">
      <label for="picture">Afbeelding(en) omschrijving:</label>
      <input type="file" class='form-control' id='picture' name="pictures" multiple>
    </div>
    <div class="form-group">
      @include('layouts.errors')
    </div>

    <button type="submit" class="btn btn-primary">Toevoegen</button>
  </form>

标签: phplaravelfileupload

解决方案


您可以在代码中尝试以下更改吗?我只添加了Array类型name属性name="pictures[]"

<input type="file" class='form-control' id='picture' name="pictures[]" multiple>

示例代码:

<form class="form-horizontal" enctype="multipart/form-data" method="post" action="/details">

这用于多项选择:

<input required type="file" class="form-control" name="images[]" placeholder="address" multiple>

PHP 逻辑

public function store(request $request) {

    $input=$request->all();
    $images=array();
    if($files=$request->file('images')){
        foreach($files as $file){
            $name=$file->getClientOriginalName();
            $file->move('image',$name);
            $images[]=$name;
        }
    }
    /*Insert your data*/

    Detail::insert( [
        'images'=>  implode("|",$images),
        'description' =>$input['description'],
        //you can put other insertion here
    ]);


    return redirect('redirecting page');
}

推荐阅读