Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete the image from the storage in laravel?

I am currently trying to delete an image when a user updates his/her post before publishing.

Everything works fine, the image is changed in the database and post page, but I want to delete the previous image.

Here is my controller

public function updatePost(Request $request){
    $data = $request->all();
    $postid = $request['id'];
    $isExist = Post::where('id', $postid)->first();
    if($isExist){
        if ($request->hasFile('image')) {

            $file = $request->File('image');
            //Get filename with extension
            $fileNameToStoreWithExt = $file[0]->getClientOriginalName();
            //Get just filename
            $filename = pathinfo($fileNameToStoreWithExt, PATHINFO_FILENAME);
            //Get just ext
            $extension = $file[0]->getClientOriginalExtension();
            //File to store
            $fileNameToStore = $filename . '_' . time() . '.' . $extension;
            //Upload Image
            $path = $file[0]->storeAs('image', $fileNameToStore);
            $file[0]->move('storage/image', $fileNameToStore);
            File::delete(public_path('storage/image'.$isExist['image']));
            Post::where('id', $postid)->update([
                'title' => $data['title'],
                'category' => $data['category'],
                'content' => $data['content'],
                'image' => $path
            ]);
            return response()->json([
                'status'=>'200',
                'response'=> 'successfully updated'
            ]);
        }else{
            Post::where('id', $postid)->update([
                'title' => $data['title'],
                'category' => $data['category'],
                'content' => $data['content']
            ]);
            return response()->json([
                'status'=>'200',
                'response'=> 'successfully updated'
            ]);
        }
    }else{
        return response()->json([
            'error'=> 'post does not exist'
        ]);
    }
}

I used:

File::delete(public_path('storage/image'.$isExist['image']));

but it didn't do the job

my delete function

       public function deletePost($id){
        $post = Post::where('id',$id)->first();
//        dd($post);
        if(!$post){
            return response()->json([
                'status' => '500',
                'error' => 'post not found'
            ]);
        }
        Storage::disk('public')->delete('/storage/image'. $post['image']);
        Post::where('id', $id)->delete();
        return response()->json([
            'status'=> '200',
            'response'=> 'Post successfully deleted'
        ]);
    }

my storage path snapshotenter image description here

like image 415
Buchi Avatar asked Nov 30 '25 16:11

Buchi


1 Answers

use Illuminate\Support\Facades\Storage;

Storage::delete('file.jpg'); // delete file from default disk

Storage::delete(['file.jpg', 'file2.jpg']); // delete multiple files         

Storage::disk('your_disk')->delete('file.jpg'); // delete file from specific disk e.g; s3, local etc

Please refer link https://laravel.com/docs/6.x/filesystem

like image 63
Saher Siddiqui Avatar answered Dec 02 '25 04:12

Saher Siddiqui



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!