2017-10-02 2 views
0

J'essaye de télécharger le dossier en utilisant ajax dans le cadre de codeigniter. Mon code fonctionne sans utiliser ajax mais quand j'utilise ajax je reçois le message d'erreur 'Undefined index: picture'in if ($ _FICHES [' picture '] [' nom ']).Télécharger le fichier dans codeigniter en utilisant ajax

S'il vous plaît vérifier ce code

Voir:

<form enctype="multipart/form-data" method="post"> 
    <div class="form-group"> 
     <label for="int">Picture</label> 
     <input type="file" id="picture" name="picture" class="dropify" data-height="300" /> 
    </div> 
</form> 

AJAX:

var picture=new FormData($("#picture")[0]); 
var url = "<?php echo site_url('Workscontroller/create_action'); ?>"; 
      $.ajax({ 
       url:url, 
       data: {"title":title,"caption":caption,"description":description,"kategori":kategori,"picture":picture}, 
       dataType:"JSON", 
       type:"POST", 
       mimeType: "multipart/form-data", 
       contentType: false, 
       cache: false, 
       processData:false, 
       success:function(data){ 
       swal("Berhasil ditambahkan!", "Anda berhasil menambahkan porto folio.", "success") 
       window.location.replace(data.url); 
      } 
     }); 

Controller:

$this->load->library('upload'); 
    $this->_rules(); 
    $nmfile = "file_".time(); //nama file saya beri nama langsung dan diikuti fungsi time 
    $config['upload_path'] = './works/'; //path folder 
    $config['allowed_types'] = 'gif|jpg|png|jpeg|bmp'; //type yang dapat diakses bisa anda sesuaikan 
    $config['max_size'] = '2048'; //maksimum besar file 2M 
    $config['max_width'] = '2000'; //lebar maksimum 1288 px 
    $config['max_height'] = '2000'; //tinggi maksimu 768 px 
    $config['file_name'] = $nmfile; //nama yang terupload nantinya 
    $this->upload->initialize($config); 
    if($_FILES['picture']['name']) 
    { 
     if ($this->upload->do_upload('picture')) 
     { 
      $gbr = $this->upload->data(); 
      $data = array(
       'title' => $this->input->post('title',TRUE), 
       'caption' => $this->input->post('caption',TRUE), 
       'description' => $this->input->post('description',TRUE), 
       'picture' => $gbr['file_name'], 
       'kategori' => $this->input->post('kategori',TRUE), 
      ); 
      $this->WorksModel->insert($data); 
     } 
    } 
    else{ 

    } 
+0

envoyer le fichier en utilisant ajax ne pas même comme la méthode post – Kelvin

+0

https://stackoverflow.com/questions/10899384/uploading-both-data-and-files-in-one-form-using-ajax devrait être une bonne référence – Kelvin

+0

Vous pouvez obtenir la référence d'ici http://www.roytuts.com/ajax-file-upload-using-codeigniter-jquery/ –

Répondre

0

L'argument de formData devrait être un HTML <form> élément. Cela est plus facile à faire en donnant au <form> un attribut id.

Vue:

<form enctype="multipart/form-data" method="post" id='myForm'> 

Le ajax passe alors à

var formData = new FormData($("#myForm")[0]); 

Dans le javascript vous ne vous présentez pas comment les valeurs de title, caption, description et kategori sont définies. Mais ils sont clairement d'autres éléments <input> dans le formulaire. Vous n'avez probablement pas besoin de capturer ces valeurs séparément car toutes les entrées de formulaire (y compris les entrées de type FICHIER) sont capturées dans var formData. Cela signifie que l'option data ajax peut être réécrite de

data: {"title":title,"caption":caption,"description":description,"kategori":kategori,"picture":picture}, 

à

data: formData, 

La ligne if($_FILES['picture']['name']) devrait fonctionner maintenant.

0

// mise à jour comme ceci

var url = "";
$ .ajax ({ url: url, data: "titre": titre, "légende": légende, "description": description, "catégorie": catégorie, "image": image}, dataType: " JSON », Type: "POST", mimeType: "multipart/form-data", contentType: false,
async: false, cache: false, contentType: faux, processData: faux,
succès : function (data) {
swal ("Berhasil ditambahkan!", "Anda berhasil menambahkan porto folio.", "succès") window.location .replace (data.url); }
});