Search code examples
phplaravel-5laravel-5.6laravel-request

Laravel : $request->hasFile() is not working Call to a member function getClientOriginalExtension() on string


I am working with laravel 5.6 for upload a file using HTML form but I am having a problem while retrieving a file in a controller.

When I retrieve it using this way it returns ok return $request; it is retrieving in controller but not in hasFile() function or getClientOriginalExtension()

I have searched many website but problem is still staying here. All I have matched but not working.

Error: "Call to a member function getClientOriginalExtension() on null"

Html Form view:

<form  action="{{url('/changeProductImage')}}" enctype="multipart/form-data" method="post">
    {{csrf_field()}}
    <input type="file" name="photo" id="photo"  class="btn btn-secondary">
    <hr>
    <button type="submit" value="upload" class="form-control btn btn-primary btn-fill btn-lg">Upload Image</button>
</form>

Route:

Route::post('/changeProductImage','ProductsController@upload');

Controller:

function upload(Request $request)
{
     $image = $request->file('photo');

     $new_name = rand() . '.' . $image->getClientOriginalExtension();

     $image->move(public_path('images'), $new_name);
     return back()->with('success', 'Image Uploaded Successfully');
}

Solution

  • It's really hard to say what's the problem looking at this piece of code. Assuming you really send this like this (you don't use AJAX somewhere for example), it should work.

    What I would do, I would make sure that in your controller you have:

    use Illuminate\Http\Request;
    

    line just to make sure this request you have in your controller is really this one.

    Also keep in mind, you should probably have some validation to make sure that file is really type you want or at least you should have some additional logic for example:

    function upload(Request $request)
    {
         if (!$request->hasFile('photo') {
            return back()->with('error', 'Missing image!');
         }
    
         $image = $request->file('photo');
    
         $new_name = rand() . '.' . $image->getClientOriginalExtension();
    
         $image->move(public_path('images'), $new_name);
         return back()->with('success', 'Image Uploaded Successfully');
    }