Forums Développement Multimédia

Aller au contenu

browseForOpen et réseau

CODE Actionscript

8 réponses à ce sujet

#1 Cortux

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 357 messages

Posté 13 June 2013 - 13:23 PM

Bonjour à tous.

Je me permets de venir vous poser une question à laquelle je n'ai pas trouvé de solution.

J'ai un soft qui me permet de charger des fichiers XML sauvegardés avec du browseForOpen. Je développe, je teste pas de soucis ça fonctionne parfaitement.

Par curiosité, et pour pouvoir l'utiliser partout, je décide de poser ces sauvegardes sur le réseau, afin que tous puissent y avoir accès et paf, à mon grand étonnement, ça ne charge plus rien. Hors j'ai déjà des applications qui charge des XML sur le réseau, exception faite du "browseForOpen", donc je me suis dit que le détail venait de là. Aurait-elle des restrictions par rapport à un chargement sur un réseau sécurisé ? Je ne sais pas. J'ai comme erreur :


Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: app:///serveur/etc.
 

Voici de quelle façon je traite le chargement :


var file:File = File.applicationDirectory;
var fichier:URLRequest;
function creerListeXML()
{
  file.browseForOpen("Sélectionner le fichier à charger :");
  file.addEventListener(Event.SELECT,fileSelected)
}
function fileSelected(event:Event)
{
  fichier = new URLRequest(file.nativePath);
  var chargementXML:URLLoader = new URLLoader();
  chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
  chargementXML.load(fichier);
}
 

Un bouton "Charger" appelle la fonction creerListeXML()

Auriez-vous une idée de l'origine du problème ? J'ai regardé un peu partout, mais rien ne traite de la notion de réseau. Merci par avance pour vos réponses.

Tux.

#2 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 13 June 2013 - 14:27 PM

var file:File = File.applicationDirectory;

Si tu veux charger depuis le réseau, alors oui c'est normal. Le schema dans l'URI "app:/" correspond à un fichier local dans le dossier ou est installé ton application.(C'est une url relative)

Essaye plutot en faisant un :

var file : File = new File(); ça suffit amplement
Word hard, play hard.

#3 Cortux

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 357 messages

Posté 14 June 2013 - 10:36 AM

Bonjour Galacta,

J'ai bien effectué la modification sur la variable file, malheureusement, j'ai toujours le même problème :


Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: app:///
 

Je continue à chercher de mon côté. Petite remarque, est-ce que la notion de nativePath n'objecterait pas avec la notion de réseau ou de simple localisation ?

Merci à toi pour cette réponse dans tous les cas :)

Tux.

#4 Tonic

    Plop

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5712 messages

Posté 14 June 2013 - 10:46 AM

Ce qui est bizarre, c'est qu'il pointe sur le directory de ton app.

Peux tu tracer l'url remonté (le nativePath) une fois la sélection faite ?

Quitte à faire un str replace sur le path et recontruire un objet file pour bien pointer vers le fichier sur le reseau.

++ ^^

#5 Cortux

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 357 messages

Posté 17 June 2013 - 07:51 AM

Bonjour Tonic,

J'ai essayé de tracer le nativePath comme tu me l'as demandé, en espérant avoir bien fait :) :


  fichier = new URLRequest(file.nativePath);
  trace(fichier.url);
 


Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: app:///nom_serveur/test.xml
 

Je replanche sur le sujet !

#6 Tonic

    Plop

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5712 messages

Posté 17 June 2013 - 08:23 AM

Salut,

ah ok, je n'avais pas vu que tu essayais de charger via un UrlRequest. Ne te casse pas la tête, utilise l'objet FileStream et la méthode read pour lire directement le contenu d'un fichier.

http://help.adobe.co...FileStream.html

++ ^^

#7 Cortux

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 357 messages

Posté 17 June 2013 - 10:25 AM

Hum, il semblerait que je revienne toujours au même problème de compréhension. Je sais que la classe FileStream hérite des méthodes/propriétés de la classe file, le problème c'est qu'en passant en FileStream, la propriété browseForOpen() n'existe pas.

Petit détail que je n'ai pas donné, c'est que j'utilise l'objet File pour enregistrer également, donc n'étant pas une pointure sur cette classe, j'ai peur que la sauvegarde ne fonctionne plus :/

Dois-je transformer le file après le browseForOpen, dois-je les séparer ? J'avoue que je suis un peu perdu.

Tux.

#8 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 19 June 2013 - 08:09 AM

Salut,

FileStream te permet de lire un fichier. Donc tu concerves ton File.browseForOpen() et après une fois que ton fichier est défini (que l'utilisateur l'a séléctionné) tu l'ouvres avec FileStream.open(file, FileMode.READ);

Un fichier au sens de la classe File n'est qu'un chemin, avec une extension à la fin :P. FileStream, quand à elle, est capable de lire les données à l'intérieur.
Word hard, play hard.

#9 Cortux

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 357 messages

Posté 19 June 2013 - 09:46 AM

Bonjour à tous :)

Merci infiniment pour vos réponses car j'ai le plaisir de vous annoncer que mon problème est résolu ! Cela peut paraitre bête, mais la dernière information que tu as donné Galacta m'était complètement inconnue. Maintenant que je connais la différence entre File et FileStream, ça va aller un peu mieux, et je comprends tout à fait la logique de fusion de ces deux classes.

A l'aide de cet article, traitant de FileStream + XML(le petit paramètre supplémentaire à intégrer) (http://help.adobe.co...ade46-7dc5.html), je suis arrivé à ce que je voulais. J'ai squizzé du coup la partie chargement XML. Voici le résultat :


function creerListeXML()
{
  file.browseForOpen("Sélectionner le fichier à charger :");
  file.addEventListener(Event.SELECT,fileSelected)
}
function fileSelected(event:Event)
{
  var typeNoeud:String;
  var nomClip:String;
  fileStream.open(file, FileMode.READ);
  aXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
  for (var i=0;i
  //Etc Etc suite du code.
 

Dans tous les cas, merci merci merci à tous les deux !

Bonne journée à tous :)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP