web-dev-qa-db-fra.com

Laravel 5 Ajax Fichier/Image Upload

J'ai un problème dans mon application laravel ajax,

Je ne peux pas télécharger des images/fichiers via ajax POST.

voici mon code.

Ajax ..

/*Add new catagory Event*/
$(".addbtn").click(function(){
$.ajax({
      url:'add-catagory',
      data:{
        logo:new FormData($("#upload_form")[0]),
        },
      dataType:'json',
      async:false,
      type:'post',
      processData: false,
      contentType: false,
      success:function(response){
        console.log(response);
      },
    });
 });
/*Add new catagory Event*/

Modèle de lame ...

 <form enctype="multipart/form-data" id="upload_form" role="form" method="POST" action="" >
      <div class="form-group">
        <label for="catagry_name">Name</label>
         <input type="hidden" name="_token" value="{{ csrf_token()}}">
        <input type="text" class="form-control" id="catagry_name" placeholder="Name">
        <p class="invalid">Enter Catagory Name.</p>
      </div>
      <div class="form-group">
        <label for="catagry_name">Logo</label>
        <input type="file" class="form-control" id="catagry_logo">
        <p class="invalid">Enter Catagory Logo.</p>
    </div>

    </form>
    </div>
    <div class="modelFootr">
      <button type="button" class="addbtn">Add</button>
      <button type="button" class="cnclbtn">Reset</button>
    </div>
  </div>

Manette ..

public function catadd(){
    if (Input::hasFile('logo'))
    {
       return "file present";
    }
    else{
        return "file not present";
    }
}

Route ..

 Route::post('add-catagory',['as'=>'catagory_add','uses'=>'MastersController@catadd']);

Quelle est l'erreur dans mon code ???

Je n'arrive pas à obtenir les informations sur le fichier dans le contrôleur laravel.

Comment puis-je résoudre ce problème ...?

18
Jishad P

Deux choses à changer:

Modifiez votre fichier js à partir de:

 data:{
    logo:new FormData($("#upload_form")[0]),
 },

À:

 data:new FormData($("#upload_form")[0]),

Parce que vous souhaitez envoyer le formulaire complet.

Dans votre html:

Ajouter un nom au champ de saisie de votre fichier

<input type="file" class="form-control" id="catagry_logo">

À:

<input type="file" name="logo" class="form-control" id="catagry_logo">
25
Iamzozo

cela ne fonctionne pas pour moi à cause de dataType:'json'. Si quelqu'un a une erreur, supprimez simplement dataType:'json'.

2
rotring05

Vérifiez dans votre contrôleur ce que vous obtenez lorsque vous postez: 

echo dd(Input::all()); 

Vérifier les fichiers objet en php. Ceci en PHP: 

$_FILES

Request::file("logo");

Oui, vous ne publiez pas vraiment de données? Le formulaire est-il vraiment posté? 

1
marko