Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5 File Delete Error

There is an issue related to my laravel 5 web application regarding the file deletion.

I want to delete an entry from my table with corresponding image file. Here is my table structure.

 Schema::create('master_brands',function($table){
        $table->increments('pk_brand_id');
        $table->string('brand_name');
        $table->string('brand_logo');
        $table->timestamps();
    });

I added 3 brands to db and storing image path in brand_logo field like : (/uploads/masters/logocatagory_Computers & IT.png).

When deleting the record from database I want to delete the image file from uploads folder also. But the File was not deleting when I performing delete action. here is my delete controller.

  public function branddelete($id)
  {
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  url()."/app".$filename[0]->brand_logo;
    File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png
  }

The file is exist in my directory and the directory having 777 permission. !!

I also tried the Storage class to delete file.But there is no way !!!..

How can I solve this issue? Any Ideas... :(

like image 683
Jishad P Avatar asked Sep 06 '15 07:09

Jishad P


2 Answers

You are doing it the wrong way. You can't possibly delete a file from URL, you must provide file PATH not URL

Edited

Assuming the file you wish to delete is located in public/uploads/masters/logocatagory_Computers you could do this:

public function branddelete($id)
{
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  $filename[0]->brand_logo; 
    //example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder
    $file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}");

    if(File::exists($file_path)) File::delete($file_path); 
}
like image 66
Emeka Mbah Avatar answered Nov 02 '22 13:11

Emeka Mbah


If you have the file out Storage/app/ , Storage:: does not work, change the /Config/Filesystems.php try put your 'local' at base_path() and comment default storage_path(),

    'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => base_path(),
        // 'root'   => storage_path('app'),
    ],

Then in Controller

use Illuminate\Support\Facades\Storage;

Then in public funtion use Storage Model

$path= 'uploads/masters/';
Storage::delete($path . $filname);
like image 28
Raul Fernandez Marques Avatar answered Nov 02 '22 14:11

Raul Fernandez Marques