0

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');
}
Marcin Nabiałek
  • 109,655
  • 42
  • 258
  • 291
hamza shan
  • 11
  • 1
  • 4

2 Answers2

0

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');
}
Marcin Nabiałek
  • 109,655
  • 42
  • 258
  • 291
  • thanks, man, it's working now but I don't know how !! haha I change nothing but slap keyboard and goes for sleep when I turned laptop again it's working really I make no changes even clear cache etc I don't know why. But thanks for your suggestions. – hamza shan Aug 27 '18 at 14:30
0

May be you are using this statement use Illuminate\Support\Facades\Request;

insted of use Illuminate\Http\Request;