test de Upload.swf
Cette page teste le fichier Upload.swf ci-dessous, qui permet l'upload de plusieurs fichiers.
Vous devez installer FlashPlayer pour utiliser ce site
Documentation
Le fichier Upload.swf permet de sélectionner plusieurs fichiers en une seule fois et les envoyer sur un site web à travers un POST.
Le fichier HTML
Upload.swf est fait pour être intégré dans une page web à peu près comme ceci :
<textarea id="MESG"> </textarea>
<div id="Upload">
<p>Vous devez installer FlashPlayer pour utiliser ce site</p>
</div>
<script type='text/javascript' src='/js/swfobject/swfobject.js'></script>
<script type='text/javascript'>
function SWF(movieName)
{
return (navigator.appName.indexOf("Microsoft") != -1)
? window[movieName]
: document[movieName];
}
function setPostData()
{
var mesg = document.getElementById('MESG').value;
SWF("Upload").setPostData("OK=1&MESG="
+encodeURIComponent( mesg)
);
}
function UploadEvent(e)
{
if(e=='init') { setPostData(); }
if(e=='cancel') { SWF("Upload").reset(); }
if(e=='finish') { SWF("Upload").reset(); }
}
var flashvars = { url: "http://lantralab.com/flash/multi-upload/upload.pl" };
var params = { allowScriptAccess : "always" };
var attributes = {};
swfobject.embedSWF("Upload.swf", "Upload", "300", "30", "9.0.0",
"/js/swfobject/expressInstall.swf", flashvars, params, attributes );
</script>
Script recevant les fichiers
Le script qui reçoit les fichiers ressemble beaucoup à un script de formulaire avec un <INPUT TYPE='FILE'> à part la gestion des erreurs qui doit ce faire en HTTP avec flash.
Retour du script recevant les fichiers
Flash ne regarde absolument PAS le contenu de ce qui est renvoyé par le script auquel il envoi le fichier. Il ne regarde que le code HTTP (pas HTML) renvoyé. Si le serveur renvoi un 200 alors l'opération est considéré comme réussie.
Cela veut dire que vous ne pouvez pas utiliser un script qui fonctionne avec un formulaire tel quel (à moins d'ignorer les erreurs).
Vous devez donc faire 2 scripts, ou un seul script avec un moyen de reconnaitre d'où vient la requête :
- utilisation d'une variable "FLASH=on" dans setPostData()
- utilisation de l'absence de cookie et d'une variable de sesssion dans setPostData() si vous utilisez un cookie de session
- utilisation du USER_AGENT qui doit être "Shockwave Flash"
Le code d'erreur renvoyé par le script importe peu, tout ce qui n'est pas 200 entraine une IOError #2038 dans flash.
Remarques utiles
- Vous aurrez peut-être remarqué l'utilisation de encodeURIComponent, qui permet d'encoder une variable devant être transmise dans une URI et QUI FONCTIONNE EN UTF8 contrairement à escape() qui ne fonctionne qu'en Latin1.