Input:: file () renvoyant null Laravel

J'ai écrit un script de téléchargement et même si j'utilise la fonction Laravel intégrée Input::file (), elle renvoie toujours null. Je vais poster mon code de contrôleur domestique.

public function handleUpload()
    {
        $user = Auth::user();
        $username = $user->username;
        $userId = $user->id;
        $path_to_users = "users";
        $user_profile_img = 'users/'.$username.$userId.'/'.$username.'image001.jpg';
        $user_path_profile = "users/$username$userId";
        $user_image_name = $username.'image001.jpg';
        if(file_exists($path_to_users))
        {
            if(file_exists("$user_path_profile")){
                $file = Input::file('profile')->move("$user_path_profile/", $user_image_name);
            } else {
            mkdir("$user_path_profile");
            $file = Input::file('profile')->move("$user_path_profile/", $user_image_name);
        }

        } else {
            mkdir("users");
            mkdir("$user_path_profile");
            $file = Input::file('profile')->move("$user_path_profile/", $user_image_name);
        }
    }

Quand je meurs(var_dump (Input::file ('profile'))) retourne null ce qui signifie qu'il ne prend pas mon fichier comme un fichier réel. Quand je meurs(var_dump (Input::get ('profile'))) il retourne le nom de l'image ce qui signifie que mon script de téléchargement fonctionne mais que le backend Laravel échoue. Est-ce vrai, ou est-ce que je manque quelque chose?

Voici mes trucs de formulaire HTML:

@if($user->id == $userProf->id)

                            <div class="fileUpload button-success pure-button">  
                                <span>Upload</span>
                                <form action="{{action('HomeController@handleUpload')}}" method="POST" enctype="multipart/form-data">
                                    <input type="file" name="profile" class="upload" />

                                </form>
                            </div>
                            @endif
22
demandé sur Laurence 2014-03-19 21:15:10

3 réponses

J'ai eu le même problème sous une forme normale. J'ai oublié d'ajouter:

enctype="multipart/form-data"
72
répondu DenLanden 2017-11-20 15:45:48

J'ai eu le même problème et j'ai réalisé que j'avais oublié quelque chose dans le formulaire. Utilisez les formulaires laravel intégrés car ils ajouteront automatiquement une protection CRSF (voir http://laravel.com/docs/html ). Quoi qu'il en soit - vous devez ajouter 'files' => true en haut du formulaire-ainsi, par exemple, dans le modèle de lame, il pourrait ressembler à:

{{ Form::open( array('route' => 'admin.store', 'class'=>'form-horizontal', 'files' => true)) }}

{{Form::file('file')}}

{{ Form::submit('Submit', array('class' => 'btn btn-info')) }}

{{ Form::close() }}
27
répondu Andrew 2014-06-04 14:48:01

En regardant votre code, cela devrait fonctionner, donc il semble que vous ayez un problème dans n'importe quoi d'autre, peut-être même votre vue. Je viens de construire deux routeurs pour le tester ici:

Route::post('file', function() {

    echo "<pre>";
    var_dump(Input::file('profile'));
    echo "</pre>";

});

Route::get('upload', function() {

    return Form::open(array('url' => '/file', 'files' => true)) .
            Form::file('profile') .
            Form::submit('upload');

});

Vous pouvez les utiliser comme référence pour, étape par étape, faire fonctionner le vôtre aussi.

3
répondu Antonio Carlos Ribeiro 2014-03-19 18:46:03