Laravel 8: How to delete file in storage folder

Viewed 1279

I currently have an API where it uploads and delete the PDF of the lesson. You see, whenever I delete the PDF, or make it null, it doesn't delete the file in my storage directory [C:\xampp\htdocs\drv-api\storage\app\public\uploads]

My Lesson PDF Controller:

    <?php

namespace App\Http\Controllers;

namespace App\Http\Controllers;
use App\Models\LessonPDF;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File; 
use Illuminate\Support\Facades\Storage;

class LessonPDFController extends Controller
{
    public function FileUpload(Request $request, $id)
    {
        $rules=[  
            'file'=>'required|mimes:pdf',
        ];
        $validator = Validator::make($request->all(), $rules);
        if($validator->fails()){
            return response()->json($validator->errors(),400);
        }
        
        $file_mime_type = $request->file->getClientMimeType();
        // $original_file_name = $request->file->getClientOriginalName();

        $uploaded_files = $request->file->store('public/uploads/');
        // $uploaded_files = $request->file->storeAs('public/uploads/', $request->file->getClientOriginalName());

        $lesson = LessonPDF::find($id);
        $lesson->lesson_pdf = $request->file->hashName();

        $results = $lesson->save();
        if($results){
            return ["result"=>"PDF Added"];
        }else{
            return ["result"=>"PDF Not Added"];
        }

        // return [ "result"=>"$uploaded_files"];

    }


    public function DeletePDF($id)
    {    
        $lesson = LessonPDF::find($id);
        if(is_null($lesson)){
            return response()->json('Record not found!', 401);
        }

        // $image_path = public_path().'/'.$lesson->file; unlink($image_path);

        // $image_path = storage_path().'public/uploads/'.$lesson->file;
        unlink(storage_path('app/public/uploads/'.$lesson));

        if (File::exists($image_path)) {
            //File::delete($image_path);
            unlink($image_path);
        }
        // Storage::delete($lesson->lesson_pdf);
        $lesson->update(['lesson_pdf' => null]);
            return response('PDF Deleted', 200);

    }

    }

My LessonPDF Model:

  <?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class LessonPDF extends Model
{
    public $table = "lesson";
    use HasFactory;

    protected $fillable = [
        'lesson_pdf',
    ];

    // protected $guarded = [];
}

Any kind of help would be appreciated. Thank you!

3 Answers

Try this

if ( file_exists(storage_path(('app/public/uploads/'.$lesson->file && $lesson->file !='')))) {
    unlink(storage_path(('app/public/uploads/'.$lesson->file)));
}

Try this

use Illuminate\Support\Facades\Storage;
if (File::exists($image_path)) 
{         
  Storage::delete($image_path);
}

Update:

I already fixed it with this code:

 unlink(storage_path('app/public/images/'.$user->user_image));

thanks everyone!

Related