Laravel 5.4 文件存在则替换

Laravel 5.4 replace file if exist

我需要解决一个小小的不便,即在修改关联的注册表时出现图像更新。

当我修改注册表时,我想替换目录中的关联文件。

这是我的 table 结构:

Schema::create('institutions', function(Blueprint $table)
        {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('name')->unique();
            $table->string('initials')->nullable();
            $table->string('description')->nullable();
            $table->string('avatar')->default('default.jpg');
            $table->timestamps();
        });

这是我在控制器上的更新方法:

public function update(Request $request, $id)
    {
        //

        $institution = $this->institution->find($id);

        try
        {
            $institution->update($request->all());

            if($request->hasFile('avatar')){
                $avatar = $request->file('avatar');
                $filename = time() . '.' . $avatar->getClientOriginalExtension();
                Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename ) );

                $institution->avatar = $filename;
                $institution->save();
            }

            $updated = $institution;

            $message = flash('Institución actualizada correctamente!!!', 'success');

            return redirect()->route('instituciones.index')->with('message', $message);    
        }       

        catch(\Illuminate\Database\QueryException $e)
        { 
            $message = flash('La institución no se actualizó correctamente!!!', 'danger');

            return redirect()->route('institutions.create')->with('message', $message); 
        }   

    }

我试过各种方法都没有成功。

上传的图片必须具有相同的文件名才能替换旧的,但在这种情况下不会替换,因为time()方法。

您可以通过从数据库中获取文件名来删除旧图像并保存新图像

//find data by id
$institution = $this->institution->find($id);
$filename  = public_path('uploads/institutions/').$institution->avatar;
if(File::exists($filename)) {

  $avatar = $request->file('avatar');
  $filename_new = time() . '.' . $avatar->getClientOriginalExtension();
  Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename_new ) );

  //update filename to database
  $institution->avatar = $filename_new;
  $institution->save();    
  //Found existing file then delete
  File::delete($filename);  // or unlink($filename);
}

希望对您有所帮助