'Cannot send file from Postman to Laravel API

I am trying to send an image to my laravel APIs from postman.
I added the file(280KB) on the request body like so: enter image description here

On the server side I am trying to catch the file and save it, but it returns that there is no file.

public function uploadImage(Request $request)
    {
        //returns false
        $request->hasFile('profile_image');
        //returns profile_image is required
        $request->validate(['profile_image' => 'required|image:jpeg,png,jpg,gif,svg']);
        //returns null
        $request->file('profile_image'); 
    }

I am calling the function from api.php like so:

Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);

I thought maybe I shouldn't put the file in Body, but couldn't find an alternative.
Also I am finally trying to send the file from a vue client, but I had the same Issue when trying to send the file from there.
How do I get the server to catch the file?

Edit: adjusted typo in example code

new code sample

I changed the method from put to post, since I wanted to test the post method as well. I also tried _method put in postman beforehand. enter image description here

Here is the code sample on Laravel:

//api.php
Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);
    //CreatorController.php
    public function uploadImage(Request $request)
    {
        if($request->hasFile('profile_image')){
            $allowedfileExtension=['gif','jpg','png'];
            $file = $request->file('profile_image');
            $extension = $file->getClientOriginalExtension();

            if(in_array($extension,$allowedfileExtension)) {
                $path = $file->store('public/images/profile');
                $path_url = $path;
                return ["image_url" => $path_url, "image" => $request->file('profile_image')];
            }

            return false;
        }
    }

The $request->hasFile('profile_image') returns true, but then $request->file('profile_image') returns null, failing to save the image.
My vue client side code (if it might turn useful):

if(this.profile_image != null){
  let data = new FormData();
  data.append('profile_image', this.profile_image)
  axios
    .post('http://localhost:8000/api/creators/'+uid+'/upload_image', data, head)
    .then(
      response => (
        //successfully receives the image_url
        this.creatorData.image_url = response.data.image_url,
        console.log(response.data)
      ),
    )
    .catch(
      error => (
        localStorage.setItem('error', error),
        console.log(error.response)
      ),
      this.loading = false,
    )
}

The client side actually receives the "image_url" but the image is not saved on laravel.



Solution 1:[1]

laravel dose not support put method directly. you must use post method then pass _method to your laravel project

like this picture

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ???? ????????