【问题标题】:Laravel - Update Uploaded Files in Input FileLaravel - 更新输入文件中上传的文件
【发布时间】:2019-04-27 16:06:56
【问题描述】:

我想更新我上传的图片,但是一旦我更新了 1 张图片,其他图片就会被删除,这是为什么呢?我想让它们保持上传时的状态。请帮帮我,谢谢。

Here is an image of the problem

控制器

更新,公共函数,这里是我放代码逻辑的地方

public function update(Request $request, $id)
{
    $this->validate($request, [
        'title' => 'required',
        'description' => 'required',
        'fleet_image.*' => 'image|nullable|max:1999'
    ]);
    $fleet = [];
    if ($request->has('fleet_image'))
    {   
        //Handle File Upload


        foreach ($request->file('fleet_image') as $key => $file)
        {
            // Get FileName
            $filenameWithExt = $file->getClientOriginalName();
            //Get just filename
            $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
            //Get just extension
            $extension = $file->getClientOriginalExtension();
            //Filename to Store
            $fileNameToStore = $filename.'_'.time().'.'.$extension;
            //Upload Image
            $path = $file->storeAs('public/fleet_images',$fileNameToStore);
            array_push($fleet, $fileNameToStore);
        }

        $fileNameToStore = serialize($fleet);
    }
    else
    {
        $fileNameToStore='noimage.jpg';
    }


    if (count($fleet)) {
        foreach ($fleet as $key => $value) {
        $fleetContent = Fleet::find($id);
        $fleetContent->title = $request->title[$key];
        $fleetContent->description = $request->description[$key];
        $implodedFleet = implode(' , ', $fleet);
        if($request->hasFile('fleet_image')){
       $fleetContent->fleet_image = $implodedFleet;
        }
       $fleetContent->save();
       return redirect('/admin/airlineplus/fleets')->with('success', 'Content Updated');
    }

}
return redirect('/admin/airlineplus/promotions')->with('success', 'Content Updated');


}

查看、编辑.blade.php

  {!! Form::open(['action'=>['Admin\FleetsController@update',$fleet->id], 'method' => 'POST','enctype'=>'multipart/form-data', 'name' => 'add_name', 'id' => 'add_name']) !!}

        <div class="table-responsive">
          <table class="table table-bordered" id="dynamic_field">
            <tr>
              <td>   {{Form::text('title[]', $fleet->title, ['class' => 'form-control', 'placeholder' => 'Enter a Title', 'id'=>"exampleFormControlFile1"])}}<br>

                {{Form::textarea('description[]', $fleet->description, ['class' => 'form-control', 'placeholder' => 'Enter a Description'])}} <br>
                <div class="card card-body col-md-8">

                @foreach(explode(' , ' ,$fleet->fleet_image) as $content)
                  <img src="{{ asset('storage/fleet_images/' . $content) }}" style="width:50px;height:50px;"><br/>

                  {{ Form::file('fleet_image[]',['id'=>'exampleFormControlFile1']) }}<br/>
                  @endforeach 
                </div>
             </td>

            </tr>
          </table>
          {{Form::hidden('_method', 'PUT')}}
          {{Form::submit('submit', ['class'=>'btn btn-primary', 'name'=>'submit'])}}
        </div>
    {!! Form::close() !!}

【问题讨论】:

    标签: php mysql arrays laravel laravel-5


    【解决方案1】:

    在您的控制器上

    $fleet = array();
    $fleetContent = Fleet::find($id);
    if ($request->has('fleet_image')) {
        for($i=0;$i<3;$i++){
            if(isset($request->file('fleet_image')[$i])){
                $filenameWithExt = $request->file('fleet_image')[$i]->getClientOriginalName();
                //Get just filename
                $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
                //Get just extension
                $extension = $request->file('fleet_image')[$i]->getClientOriginalExtension();
                //Filename to Store
                $fileNameToStore = $filename.'_'.time().'.'.$extension;
                //Upload Image
                $path = $request->file('fleet_image')[$i]->move('public/fleet_images',$fileNameToStore);
                array_push($fleet, $fileNameToStore);
            }else{
                $fleetContentExplode = explode(',',$fleetContent->fleet_image);
                array_push($fleet,$fleetContentExplode[$i]);
            }
        }
    }
    

    在您的查看文件上

    {!! Form::open(['action'=>['Admin\FleetsController@update',$fleet->id], 'method' => 'POST','enctype'=>'multipart/form-data', 'name' => 'add_name', 'id' => 'add_name']) !!}
    
        <div class="table-responsive">
          <table class="table table-bordered" id="dynamic_field">
            <tr>
              <td>   {{Form::text('title', $fleet->title, ['class' => 'form-control', 'placeholder' => 'Enter a Title', 'id'=>"exampleFormControlFile1"])}}<br>
    
                {{Form::textarea('description', $fleet->description, ['class' => 'form-control', 'placeholder' => 'Enter a Description'])}} <br>
                <div class="card card-body col-md-8">
    
                @foreach(explode(' , ' ,$fleet->fleet_image) as $content)
                  <img src="{{ asset('storage/fleet_images/' . $content) }}" style="width:50px;height:50px;"><br/>
    
                  {{ Form::file('fleet_image[]',['id'=>'exampleFormControlFile1']) }}<br/>
                  @endforeach 
                </div>
             </td>
    
            </tr>
          </table>
          {{Form::hidden('_method', 'PUT')}}
          {{Form::submit('submit', ['class'=>'btn btn-primary', 'name'=>'submit'])}}
        </div>
    {!! Form::close() !!}
    

    NB::我刚刚从您的视图输入文本中删除了数组

    【讨论】:

    • 当您更新某些内容时,您只会获得 1 次更新,只有第一个数据可以更新,然后它会重定向,因为您将 redirect() 放入 foreach 。我刚刚从循环中删除它
    • 不,先生,当我删除重定向时,将发生偏移 1 错误
    • 尝试使用 $file->move('public/fleet_images',$fileNameToStore);而不是 $path = $file->storeAs('public/fleet_images',$fileNameToStore);您可以检查您上传的图片没有为此上传
    • 我想看看你的错误。如果您通过推送 array_push() 获取文件名,它应该可以工作
    • 我的控制器在代码上方,先生..你能编辑一下吗?如果有效,则将其标记为答案
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多