Zinc et HTTP
Par Cédric Tabin le lundi 18.05.2009, 16:00 - Flash, Flex & co - Lien permanent
Pour les besoins d'un projet, je suis actuellement en train de tester Zinc 3.0 et plus particulièrement la classe HTTP.
L'idée est donc simplement de télécharger un fichier sur un site pour le rapatrier en local... La documentation de Zinc étant assez bien faite, voici le petit bout de code que je teste :
import mdm.*; var httpConnection:HTTP; Application.init(this, function():void { httpConnection = new HTTP(); httpConnection.getFile("http://www.astorm.ch/blog/public/Sources/JPA-Demo.zip", "", "", "./jpa.zip"); });
Je compile le tout (à noter au passage qu'il faut ajouer le swc dans les librairies), et crée l'exécutable via Zinc. Le souci survient lorsque je lance l'application : elle se crashe misérablement avec le message d'erreur standard windows.
Après quelques autres essais, le problème vient du fait que mon ordinateur n'était pas connecté à Internet ! Il suffit que la carte soit désactivée, le câble soit débranché ou autre pour que l'appel à la méthode getFile fasse tout planter... J'en ai d'ailleurs ouvert un post sur le forum de support.
La solution consiste donc à vérifier que l'utilisateur est bien connecté à Internet avant de lancer le téléchargement :
import mdm.*; var httpConnection:HTTP; var urlTest:URLRequest = new URLRequest("http://www.google.com"); var connectionTester:URLLoader = new URLLoader(); connectionTester.addEventListener(Event.COMPLETE, onComplete); connectionTester.addEventListener(IOErrorEvent.IO_ERROR, onError); connectionTester.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); function onError(evt:Event):void { //... } function onComplete(evt:Event):void { httpConnection = new HTTP(); httpConnection.getFile("http://www.astorm.ch/blog/public/Sources/JPA-Demo.zip", "", "", "./jpa.zip"); } Application.init(this, function():void { connectionTester.load(urlTest); });
Ce n'est pas très propre, mais ça permet de contourner le problème. A noter également que pour tester, il faut préciser "Network access only" dans les paramètres de publication (Local playback security).
J'ai détecté ce bug dans la version 3.0.13 de Zinc, mais d'après les releases notes de la version 3.0.14, il n'a pas été corrigé. Espérons que cela arrivera vite !
Commentaires
Salut,
pour ta requete qui va servir de détection de connexion internet, tu peux simplement demander le header, au lieu de download toute la page comme cela:
private function checkNetworkConnection(event:Event=null):void{
var headRequest:URLRequest = new URLRequest();
headRequest.method = "HEAD";
headRequest.url = "http://www.orange.fr";
var connectTest:URLLoader = new URLLoader(headRequest);
connectTest.addEventListener(HTTPStatusEvent.HTTP_STATUS, connectHttpStatusHandler);
connectTest.addEventListener(Event.COMPLETE, connectCompleteHandler);
connectTest.addEventListener(IOErrorEvent.IO_ERROR, connectErrorHandler);
}
private function connectHttpStatusHandler(event:*=null):void{
if (event.status == "0"){
networked = false
} else {
networked = true;
}
}
Voila,même si cette solution n'est que temporaire, c'est plus clean^^
Fabien
Salut,
En effet je n'avais pas pensé à optimiser la chose de ce point de vue Merci pour l'astuce !
@++
ouvrir un ticket chez zinc, et espérer qu'ils fassent qqchose... la bonne blague!
perso ça fait des mois que j'attends qu'ils fixent leur classe de FTP...
bonne chance quand meme!
Salut Laurent
C'est quoi leur bug sur la classe FTP ? Je me pencherai plutôt sur une API FTP en AS3, il me semble que ça existe déjà...
@++