Upload de fichier avec Ajax, JQuery et XMLHTTPRequest 2
Ce tutoriel présente une technique afin d'uploader un fichier
dans un formulaire directement en Ajax, c'est-à-dire sans
rechargement de page, et en utilisant XMLHTTPRequest 2.
Soit le formulaire suivant possédant un input de type « file », un autre de type « text » et enfin un « textarea ». Nous souhaitons envoyer, du côté serveur, l’ensemble des données de ce formulaire à l’aide d’Ajax :
<form id="listedit_form_attachment" action="/app.php/attachment/createTo/111" method="post" enctype="multipart/form-data" >
<input type="file" id="attachment_fileTempAttachment" name="attachment[fileTempAttachment]" value="" />
<input type="text" id="attachment_titleAttachment" name="attachment[titleAttachment]" value="" />
<textarea id="attachment_commentAttachment" name="attachment[commentAttachment]" class="no-horizontal"></textarea>
<input type="hidden" id="attachment__token" name="attachment[_token]" value="d2ccaa122678bb5d11955691c2293186ced68253" />
<input type="submit" value="Envoi de fichier" id="listedit_submit" />
</form>
Le code JQuery :
$("#listedit_form_attachment").submit(function()
{
var fileInput = document.getElementById('attachment_fileAttachment');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);
formData.append('attachment[titleAttachment]',$('#attachment_titleAttachment').val());
formData.append('attachment[commentAttachment]', $('#attachment_commentAttachment').val());
formData.append('attachment[fileAttachment]', 'file');
formData.append('attachment[_token]', $('#attachment__token').val());
$.ajax({
type: "POST",
url: "{{ path('Upload_File', { 'toId' : fatherEntity.id }) }}",
data: formData,
cache: false,
contentType: false,
processData: false,
async: false,
beforeSend: function () { $("#divLoading").show(); },
complete: function () { $("#divLoading").fadeOut(); },
success: function(data){
$('#listedit_form_div_{{ divA }}').html(data);
}
});
return false;
});
Remarque :
Les données seront envoyées, du côté serveur, grâce à « FormData ». La méthode « append » va setter les valeurs dans le « formdata ». Dans l’Ajax les variables « cache », « contentType », « processData » et « async » doivent être mises à « false ».
Du côté serveur (Symfony2) :
1/ On utilise exactement les mêmes méthodes que pour un formulaire soumis plus classiquement :
$em = $this->getDoctrine()->getEntityManager();
$attachment = new Attachment();
$attachmentForm = $this->createForm(new AttachmentForm(), $attachment);
$request = $this->getRequest();
$attachmentForm->bindRequest($request);
2/ Pour récupérer les données relatives au fichier, on utilisera :
$file = $request->files->get('file');
// Récupérer les erreurs
$file->getError();
// Récupérer son nom original
$file->getClientOriginalName();
// L’enregistrer dans un dossier
$file->move("attachments/", $file->getClientOriginalName());
1 janvier 2016 - Wakonda - JavaScript
Rechercher
Tags
Articles récents
- Quel est le but de l'attribut "role" en HTML ?
- Changer la couleur de l'espace réservé (placeholder)
- Attention à cet email d’arnaque !
- Supprimer un fichier d'un référentiel Git sans le supprimer du système de fichiers local
- JS - Récupérer le dernier élément d'un tableau
- JS - Prévisualiser une image avec son upload
- PHP - Convertir une chaîne de caractères en un booléen
- PHP : Vérifier si une session a déjà été démarrée
- Créer un APK ou un AAB en ligne de commandes
- L'opérateur !! en Javascript