ajaxFileUpload est un plugin jQuery qui permet d'envoyer des fichiers au serveur de manière asynchrone via AJAX.
Syntaxe et paramètres
La syntaxe générale est $.ajaxFileUpload([options]). Les options disponibles incluent :
- url : Chemin vers le script serveur qui gère la réception du fichier.
- fileElementId : Identifiant de l'élément
<input type="file">concerné. - secureuri : Indique si une connexion sécurisée est requise (défaut : false).
- dataType : Format de la réponse attendue (xml, script, json, html). Si omis, jQuery tente une détection automatique.
- succsess : Fonction de rappel invoquée après une réponse positive du serveur, avec les données en paramètre.
- error : Fonction de rappel en cas d'échec de la requête.
- data : Objet contenant des paramètres supplémentaires à transmettre avec le fichier.
- type : Doit être défini sur "post" lorsque des paramètres personnalisés sont envoyés via l'option data.
Débogage des erreurs courantes
Plusieurs erreurs JavaScript peuvent survenir lorrs de l'utilisation :
- SyntaxError: missing ; before statement : Vérifier que l'URL du script est accessible.
- SyntaxError: syntax error : Contrôler le code côté serveur pour des fautes de syntaxe.
- SyntaxError: invalid property id : S'assurer que l'ID de l'élément fichier existe dans le DOM.
- SyntaxError: missing } in XML expression : Vérifier la cohérence du nom de fichier envoyé.
- Pour d'autres problèmes, utiliser la varible
$errorpour afficher les valeurs des paramètres et faciliter l'identification des erreurs.
Implémentation étape par étape
Étape 1 : Intégration des fichiers JavaScript
Commencez par inclure jQuery, puis le plugin ajaxFileUpload :
<script src="jquery.min.js" type="text/javascript"></script>
<script src="ajaxfileupload.js" type="text/javascript"></script>
Étape 2 : Structure HTML
Préparez le formulaire avec un champ fichier, un bouton et une zone pour l'aperçu :
<body>
<input type="file" id="inputFichier" name="fichier" />
<button type="button" id="btnEnvoyer">Envoyer</button>
<img id="apercuImage" alt="Fichier uploadé" src="" />
</body>
Étape 3 : Logique JavaScript
Écoutez l'événement clic et lancez l'upload asynchrone :
<script type="text/javascript">
$(document).ready(function() {
$("#btnEnvoyer").click(function() {
envoyerFichier();
});
});
function envoyerFichier() {
$.ajaxFileUpload({
url: '/traitement-upload.aspx',
secureuri: false,
fileElementId: 'inputFichier',
dataType: 'json',
success: function(reponse) {
if (reponse.urlFichier) {
$("#apercuImage").attr("src", reponse.urlFichier);
}
if (reponse.erreur) {
alert("Erreur : " + reponse.erreur);
}
},
error: function(data, statut, exception) {
alert("Échec de l'upload : " + exception);
}
});
return false;
}
</script>
Étape 4 : Traitement côté serveur (ASP.NET Web Forms)
Exemple de page de traitement pour recevoir et sauvegarder le fichier :
protected void Page_Load(object sender, EventArgs e)
{
HttpFileCollection fichiersRecus = Request.Files;
if (fichiersRecus.Count > 0)
{
string nomOriginal = fichiersRecus[0].FileName;
string cheminSauvegarde = Server.MapPath("~/uploads/") + System.IO.Path.GetFileName(nomOriginal);
fichiersRecus[0].SaveAs(cheminSauvegarde);
string urlPublique = "/uploads/" + nomOriginal;
string jsonReponse = "{ \"urlFichier\": \"" + urlPublique + "\", \"erreur\": \"\" }";
Response.ContentType = "application/json";
Response.Write(jsonReponse);
Response.End();
}
}
Version pour ASP.NET MVC
Contrôleur
public class UploadController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult TraiterFichier()
{
HttpFileCollectionBase fichiers = Request.Files;
string cheminResultat = "";
if (fichiers.Count > 0)
{
string nomFichier = fichiers[0].FileName;
cheminResultat = "/uploads/" + nomFichier;
string cheminPhysique = Server.MapPath(cheminResultat);
fichiers[0].SaveAs(cheminPhysique);
}
return Json(new { chemin = cheminResultat }, JsonRequestBehavior.DenyGet);
}
}
Vue (HTML et JavaScript)
<html>
<head>
<script src="/Scripts/jquery-3.6.0.min.js"></script>
<script src="/Scripts/ajaxfileupload.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#btnEnvoyer").click(function() {
if ($("#inputFichier").get(0).files.length > 0) {
uploaderVersMVC();
} else {
alert("Veuillez choisir un fichier.");
}
});
});
function uploaderVersMVC() {
$.ajaxFileUpload({
url: '@Url.Action("TraiterFichier", "Upload")',
secureuri: false,
fileElementId: 'inputFichier',
dataType: 'json',
success: function(data) {
if (data.chemin) {
$("#imgResultat").attr("src", data.chemin);
}
},
error: function(xhr, statut, erreur) {
console.error("Erreur upload :", erreur);
}
});
}
</script>
</head>
<body>
<input type="file" id="inputFichier" name="fichier" />
<button type="button" id="btnEnvoyer">Transférer</button>
<img id="imgResultat" alt="Résultat de l'upload" src="" />
</body>
</html>