2017-04-19 5 views
0

Je n'arrive pas à télécharger plusieurs fichiers dans mon assistant jquery. L'assistant contient plusieurs champs qui sont envoyés correctement au serveur (nodejs), mais il semble que peu importe ce que je fais, les fichiers ne sont pas définis.nodejs multer avec jquery steps wizard et bootstrap fileuploader

Voici quelques extraits de code:

<form id="wodcreate" class="steps-validation" action="#" enctype="multipart/form-data"> 

...

<div class="form-group"> 
    <div class="col-lg-10"> 
     <input type="file" id="images" name="images" class="file-input" accept="image/*" multiple="multiple"> 
     <span class="help-block" data-i18n="general.Only-images-allowed">Only images are allowed. Maximum size of each image is 5 MB, and there is a maximum of 10 images.</span> 
    </div> 
</div> 

...

app.post('/api/user/create', upload.any(), function (req, res, next) { 
    //Pass the logic to a dedicated function 
    console.log(req.body); 
    console.log(req.files); 
    res.json({success : "Updated Successfully", status : 200}); 
}); 

J'utilise formdata lors de la publication sur le serveur, et parce que je l'utilise un assistant, je n'utilise pas le bouton jquery uploader, mais ajoute les images à formdata avec cette méthode:

$('#images').on('filebatchpreupload', function(event, data, previewId, index) { 
var form = data.form, files = data.files, extra = data.extra, 
    response = data.response, reader = data.reader; 

$.each(files, function (key, value) { 
    if(value != null){ 
     formData.append("images", value, value.name); 
    } 
}); 

La fonction onFinished dans l'assistant ressemble à ceci:

onFinished: function (event, currentIndex) { 

    var res = $(".steps-validation").valid(); 
    var model_data = $(".steps-validation").serializeArray(); 

    //For all normal input fields 
    $.each(model_data,function(key,input){ 
     formData.append(input.name,input.value); 
    }); 
    //For videolist (li nonform fields): 
    $('#videolist li').each(function(){ 
     formData.append('videolist[]',$(this).attr("id")); 
    }); 

    //For wysiwyg 
    var desc = CKEDITOR.instances.desc.getData(); 
    formData.append('desc',desc); 

    if (res == true) { 
     jQuery.ajax({ 
      type: "POST", 
      url: "/api/user/create", 
      data: formData, 
      processData: false, // tell jQuery not to process the data 
      contentType: false, // tell jQuery not to set contentType 
      success: function (data) { 
       if(data.status == 200){ 

       } 
      } 
     }); 
    } 
    return res; 
} 

Répondre

0

Après un certain temps, je me suis finalement compris que l'erreur était due à la fonction:

$('#images').on('filebatchpreupload') 

était pas déclenché.