Ruben
Ruben

Reputation: 454

Laravel 4 upload image form

I'm trying to make a form that allows uploading a file and store it in the public/upload folder of the application.

my form is:

<form action="/image/save" method="post">
<input name="image" type="file" />
<input type="submit" value="Save"/>
</form>

and the controller:

public function save(){
$file = Input::file('image');
$destinationPath = 'upload/';
$filename = $file->getClientOriginalName();
Input::file('image')->move($destinationPath, $filename);

But when I run it I get the following error: Call to a member function getClientOriginalName() on a non-object

Upvotes: 18

Views: 48326

Answers (5)

TechnoSakil
TechnoSakil

Reputation: 31

You can just add the field 'files'=> true in your array() if you use Laravel form style something like

{{ Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) }}

otherwise you can use the html form tag something like

<form action="/images/save" method="post" enctype="multipart/form-data">

Hope this will help you.

Upvotes: 1

Abd Ul Aziz
Abd Ul Aziz

Reputation: 140

I also faced the same problem with one of my forms, the problem was the form wasn't defined with the option, 'files' => true , which tells the Laravel4 form helper to define a form with enctype="multipart/form-data"

Here is what i did:

Define the following array in your controller and pass it to your view ,

$form_options = array (
    'url' => 'path/to/defined/route',
    'class'  => 'form-horizontal',
    'name'   => 'newUser',
    'files'  => true
);

In your view, define your form as follows:

{{ Form::open( $form_options ) }}

That will define your form with enctype="multipart/form-data"

Upvotes: 8

Ryan Tablada
Ryan Tablada

Reputation: 450

You need to have a file input enabled on a form. (Doc)

In Laravel, you can use:

Form::open('image/save', array('files'=> true))

or

<form action="/images/save" method="post" enctype="multipart/form-data">

Otherwise all you are receiving from the file input is the file name as a string.

Upvotes: 39

Cengkaruk
Cengkaruk

Reputation: 475

If you not use Blade for generate your form like this

{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}

Just add this parameter to your form tag

enctype="multipart/form-data"

Upvotes: 11

claudevandort
claudevandort

Reputation: 179

You have to get the filename as follows:

//Blade form
{{ Form::open_for_files('/image/save') }}
{{ Form::file('image') }}
{{ Form::close() }}

//get imagename
$filename = Input::file('image.name');

Good luck! :)

Upvotes: 2

Related Questions