2017-06-22 30 views
3

我需要解決一個小的不便之處,當修改相關的註冊表時,我正在展示更新的圖像。Laravel 5.4替換文件,如果存在

當我修改註冊表時,我想替換目錄中的關聯文件。

這是我的表結構:

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); 
     } 

    } 

我嘗試了多種不同的方法,但我還沒有成功。

+0

會發生什麼事,當你運行上面的代碼?例外? 500錯誤?請更具體地... – idelara

回答

3

上傳的圖片必須具有相同的文件名才能替換舊的圖片,但在這種情況下,由於採用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); 
} 

希望這將有助於