Oskars
Oskars

Reputation: 417

Laravel, upload image errors

I know, that there are many many cases about this theme already, but I looked them through, and could not find desired. Also I noticed that not a lot of the users got their answer. I am working with Laravel5, and I'm trying to upload a picture. Simple upload, just save any picture in public/img folder. I have looked up some tutorials and came up with this code: View form:

<form action="{{URL::to('adminPanel/addImg/done/'.$projectId)}}" method="get" enctype="multipart/form-data">
        <input name="image" type="file" />
        <br><br>
        <input type="submit" value="Ielādēt"/>
</form>

And the controller code:

public function addImageDone($id) {
         $file            = Input::file('image');
         $destinationPath = public_path().'/img/';
         $filename        = $id;
         $file->move($destinationPath);   
    }

I keep getting this error :

Call to a member function move() on a non-object

And I am sure, that the chosen file is image.

I would appreciate any help

So its done, the main issue was the POST part! Also the file format, but here are the correct code, that adds the image: form:

<form method="POST" action="{!! URL::to('adminPanel/addImg/done/'.$projectId) !!}" accept-charset="UTF-8" enctype="multipart/form-data">
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> //this part is to make POST method work
        <input name="image" type="file" />
        <br><br>
        <input type="submit" value="Ielādēt"/>
    </form> 

controller:

public function addImageDone($id) {
         $file = Input::file('image');
         $destinationPath = public_path().'/img/';
         $file->move($destinationPath, $id.'.png');            
    }

Upvotes: 1

Views: 1512

Answers (2)

E. S.
E. S.

Reputation: 2919

I don't know if you are using Laravel 4.2 or 5.0. But..

I recommend you to use illuminate/html - Form class. Try to use POST instead GET to upload files (https://stackoverflow.com/a/15210810/781251, http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 , http://php.net/manual/en/features.file-upload.post-method.php , http://php.net/manual/en/features.file-upload.php)

If Laravel 4.2:

View:

{{ Form::open(['url'=>'adminPanel/addImg/done' . $projectId , 'files' => true , 'method' => 'POST']) }}

    <label for="file">File</label>   
    {{ Form::file('file') }}

{{ Form::close() }}

Controller:

public function postImage()
{
    if( ( $file = Input::file('file') ) != null && $file->isValid() )
    {
        $file->move('destination','my_file_new_name.extension');

        return Redirect::back();
    }

    throw new \Exception('Error while upload file');
}

Laravel 5.0

View:

{!! Form::open(['url'=>'adminPanel/addImg/done' . $projectId , 'files' => true , 'method' => 'POST']) !!}

    <label for="file">File</label>   
    {!! Form::file('file') !!}

{!! Form::close() !!}

Controller:

public function upload(Request $request)
{
    if( ( $file = $request->file('file') ) != null && $file->isValid() )
    {
        $file->move('destination','my_file_new_name.extension');

        return redirect()->back();
    }

    throw new \Exception('Error while upload file');
}

To create a file with a new name and keep the extension:

$ext = $file->getClientOriginalExtension();
$newName = str_random(20) . '.' . $ext;

$file->move( storage_path('images') , $newName );

Now, you have a new name with the same extension. To validate if your file is an image or..whatever, use Validator.

Upvotes: 1

Margus Pala
Margus Pala

Reputation: 8663

Try this

<form method="POST" action="{!! URL::to('adminPanel/addImg/done/'.$projectId) !!}" accept-charset="UTF-8" enctype="multipart/form-data">
            <input name="image" type="file" />
            <br><br>
            <input type="submit" value="Ielādēt"/>
</form> 

And get the image as

public function postImage(Request $request) {
    $image = $request->file("image");

Upvotes: 0

Related Questions