Forums Développement Multimédia

Aller au contenu

Dl d'un fichier stocké en local

download local URL pdf CODE Actionscript

25 réponses à ce sujet

#1 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 10:20 AM

Bonjour à tous,

J'explique le contexte. Je suis en train de créer un logiciel pour des clients. Dans ce logiciel il y a une partie "Annexes", où dans cette partie on peut récupérer plusieurs médias. Des pdfs, des vidéos,...

Il y a un bouton pour les télécharger chacun des médias.

Voici mon problème : les personnes qui vont utiliser ce logiciel n'auront peut-être pas accès à internet pendant la présentation, et il faut qui'il puissent avoir la possibilité de récupéré les annexes qui sont en local dans le logiciel sans pour autant explorer l'autorun et allez farfouiller dans les dossiers "obscurs" et tout péter ...

Donc d'où ma question : est ce que l'on peut lancer une fenêtre de download d'une URL local ?? Car il me semble qu'avec un fileReference c'est uniquement un fichier distant ... Est ce qu'il n'y a pas une autre solution plus propre qu'un NavigateToURL pour ouvrir le pdf dans un navigateur qui permet lui d'enregistrer dans les versions les plus récentes de FF ou Chrome, en revanche avec IE j'ai peur....
D'où ma demande.

Si quelqu'un à une idée je suis preneur, car je bloque là dessus depuis pas mal de temps :D

Merci d'avance !

#2 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 16 July 2012 - 10:49 AM

s'il n'y a pas d'accès a internet regardes du coté de FileReference.save() qui te permettra de copier un fichier sur le bureau
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#3 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 10:53 AM

Merci Badwolf je vais regarder ça ! Meme sans connection je pouvais ouvrir un pdf en local dans un nav pour le sauvegarder mais bon c'est pas top comme solution surtout auprès d'un client.

Merci encore pour ta solution, je te tiens au courant ;-)

#4 sebastien.portebois

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3876 messages

Posté 16 July 2012 - 11:06 AM

Salut

Ton logiciel est-il en Flash ou en Air ? (puisqu'il fonctionne sans être sur le web la question se pose)
Dans le cas Air, l'utilisation de File plutôt que FileReference te permettra plus facilement d'accéder aux fichiers accompagnant ton projet, et de les ouvrir avec l'application par défaut par exemple pour des pdfs.

Bonne journée,
Séb

#5 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 11:10 AM

Salut Seb,

Mon appli est en flash et pour la méthode de FileReference.save(), il me semble que je ne peut pas l'utiliser car cela stock uniquement du String ou du XML, du Array ou si c'est un objet il est retranscrit en String, donc avec ça je suis coincé, nan ?

... A moins que je me sois trompé ! :D

#6 sebastien.portebois

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3876 messages

Posté 16 July 2012 - 11:13 AM

FileReference.save() permet de sauvegarder également du ByteArray, c'est ce qu etu utilises par exemple pour enregistrer un png ;-)

#7 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 16 July 2012 - 11:13 AM

tu dois lire et extraire le contenu de ton fichier en ByteArray.
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#8 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 11:15 AM

houllaaaa je vais devoir monter d'un level là XD je ne suis pas expert en AS3, donc je vais m'atteler donc à cette tâche, je vous fait confiance ;)
merci encore à vous deux !

#9 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 11:18 AM

je ferais pas mieux d'utiliser une lib pour générer un PDF à moins que ce soit que en AIR ??

#10 Krevare

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 923 messages

Posté 16 July 2012 - 11:36 AM

Je passe en coup de vent mais si tu veux générer un pdf @ runtime voilà ce qu'il te faut :
http://alivepdf.bytearray.org/

Bon courage pour ton projet,

Fred.

#11 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 11:38 AM

Merci Fred !

#12 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 11:50 AM

Il y a du progrès !! J'ai résussi à récupérer mon pdf dans un byteArray je génère un nouveau PDF avec le FileReference.save(); et là c'est le drame XD

j'ai bien un pdf avec le nombre de page qu'il faut mais toutes mes pages sont blanches... Qqun à une idée ??

voici le code que j'ai utilisé :


private function _downloadFile(e:MouseEvent):void
  {
   _loader = new URLLoader();
   _fileData = new ByteArray();
   _fileData.endian = Endian.LITTLE_ENDIAN;
   _loader.load(new URLRequest("test.pdf"));
   _loader.addEventListener(Event.COMPLETE, handleComplete);
  }

  function handleComplete(evt:Event):void
  {
   _fileData.writeObject(_loader.data);
   _fileData.position = 0;
   _myFile.save(_fileData,"MyPDF.pdf")
  }
 


#13 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 16 July 2012 - 14:39 PM

Salut,


   _loader = new URLLoader();
   _loader.dataFormat = URLLoaderDataFormat.BINARY;
   _fileData = new ByteArray();
   _fileData.endian = Endian.LITTLE_ENDIAN;
   _loader.load(new URLRequest("test.pdf"));
   _loader.addEventListener(Event.COMPLETE, handleComplete);
 


function handleComplete(evt:Event):void
  {
   _fileData.readBytes(_loader.data);
   _fileData.position = 0;
   _myFile.save(_fileData,"MyPDF.pdf")
  }
 

Ca devrait aller mieux, readBytes copie les octets d'un ByteArray dans un second ( éventuellement à partir d'une certaine position ). writeObject permet d'écrire un objet au sens POO du terme, une instance en quelque sorte.
Il faut préciser au loader qu'il doit charger les données sous forme binaire brut ( Je sais pas si c'est le cas par défaut, je suppose vu que tu n'as pas eu d'erreur, mais c'est mieux de le mettre. )
Morgan
Word hard, play hard.

#14 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 14:47 PM

ahhhh d'accord, je ne savais pas cela !

Merci Morgan !

En revanche cela fait bugger mon Flash :D il me revoie : echec de la conversion ( affiche mon PDF en texte) en flash.utils.ByteArray impossible. ??

#15 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 16 July 2012 - 15:05 PM

Tu peux me dire quelle ligne ?

EDIT : Tu n'aurais pas oublier le _loader.dataFormat ?
Word hard, play hard.

#16 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 15:11 PM

il ne précise pas de ligne particulière voici l'erreur :


TypeError: Error #1034: Echec de la contrainte de type : conversion de "%PDF-1.4
%âãÏÓ
135 0 obj
<</Linearized 1/L 3776098/O 137/E 781667/N 4/T 3773282/H [ 876 276]>>
endobj           
xref
135 29
0000000016 00000 n
0000001323 00000 n
0000001470 00000 n
0000001977 00000 n
0000002598 00000 n
0000003288 00000 n
0000003325 00000 n
0000003437 00000 n ... un tas de ligne de code
...
trailer
<</Size 135/ID[<527D960D9C404569868FE44EB3F5CAF6><A6F17EE67BE24BA998DF1BEEED4761FF>]>>
startxref
116
%%EOF
" en flash.utils.ByteArray impossible.
at com.boldrun.display.composant.Annexes::Annexes/handleComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

je t'avoue que je sèche complètement je pense que c'est du au " _fileData.readBytes(_loader.data);" car il ne faisait pas d'erreur avant il me générait le PDF mais vide sans rien (il n'était pas vide car en mode texte il y avait vien quelque chose et il pesait 5Mo)

PS je viens de voir ton EDIT : dataFormat en effet je l'avais oublié je check avec :D

#17 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 15:23 PM

Plus d'erreur... mais mon pdf fait 0 octet pourtant il passe dans "activate" et dans le "complete" pour le coup il est vraiment vide il ne me récupère plus rien, mais je me suis ptet planté je suis perdu je dois mettre le DataFormat en BINARY ou TEXT pour le coup ? J'ai mis en BINARY car c'est pour moi le plus logique comme on récupère des bytes qu'on stocke..

#18 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 15:46 PM

il load bien le truc, donc je vois pas l'erreur...

loaded : 3776098
total : 3776098

#19 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 16 July 2012 - 15:46 PM

Oui BINARY est le mode adapté dans ton cas.

Je n'ai plus l'ordre exacte en tête, essaye :


(_loader.data as ByteArray).readBytes(_fileData);
 

à la place de cette ligne :

_fileData.readBytes(_loader.data);
 

Word hard, play hard.

#20 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 15:52 PM

C'est nikelll !!!! ça marche !! Merci encore Morgan ! un gros gros gros Merci ! J'étais coincé depuis 2 jours dessus !
Merci encore !

#21 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 16 July 2012 - 15:55 PM

Pas de quoi. J'espère que tu comprends le cheminement que j'ai avec ce code pour l'enregistrer ... Si ce n'est pas le cas, n'hésite pas à demander des explications.

Morgan
Word hard, play hard.

#22 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 15:59 PM

si si j'ai tout compris mais je comprenais pas pk je récupérais un truc vide mais bon comme quoi des fois ça tient à pas grand chose :D

#23 Krevare

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 923 messages

Posté 16 July 2012 - 16:30 PM

Hello :)

Tu pourrais poster ta source ?
Ca m'interesse de voir comment ca se passe :)


Merci !

Fred.

#24 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 16:36 PM

Oui Fred pas de soucis, tu veux que je poste le code ici direct, ou tu veux le .as sachant que dedans il y a plein de truc qui servent à rien...
Je te poste le code ici et dis mois si tu veux le AS.



import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.events.TimerEvent;
import flash.net.FileReference;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.utils.Endian;

  private var  _URL:String;
  private var _myFile:FileReference = new FileReference();
  private var _loader:URLLoader;
  private var _fileData:ByteArray;
  private var _dataFormat:String = URLLoaderDataFormat.BINARY;


  private function downloadFile(e:MouseEvent):void
  {
   _loader = new URLLoader();
   _loader.dataFormat = _dataFormat;
   _fileData = new ByteArray();
   _fileData.endian = Endian.LITTLE_ENDIAN;
   _loader.load(new URLRequest(_URL));
   _loader.addEventListener(ProgressEvent.PROGRESS, Progress);
   _loader.addEventListener(IOErrorEvent.IO_ERROR, EventError);
   _loader.addEventListener(Event.COMPLETE, handleComplete);
  }

  function handleComplete(evt:Event):void
  {
   _myFile.addEventListener(Event.ACTIVATE, Activate);
   _myFile.addEventListener(ProgressEvent.PROGRESS, Progress);
   _myFile.addEventListener(IOErrorEvent.IO_ERROR, EventError);
   _myFile.addEventListener(Event.COMPLETE, Complete);
 
   (_loader.data as ByteArray).readBytes(_fileData);
   _fileData.position = 0;
   _myFile.save(_fileData,"MyPDF.pdf")
 
  }

  private function Complete(e:Event):void
  {
   //trace("complete : " + e)
  }

  private function EventError(e:IOErrorEvent):void
  {
   //trace("error : " + e)
  }

  private function Progress(e:ProgressEvent):void
  {
   //trace("progress : " + e)
   //trace("loaded : " + e.bytesLoaded);
   //trace("total : " + e.bytesTotal);
  }

  private function Activate(e:Event):void
  {
   //trace("activate : " + e)
  }


 

Voila et encore merci à tous !

#25 Krevare

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 923 messages

Posté 16 July 2012 - 16:37 PM

Non c'est parfait comme ça :)

Merci beaucoup !

Fred.

#26 rprevot

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 16 July 2012 - 16:39 PM

De rien c'est la moindre des choses pour les personnes qui m'ont aidées et pour les personnes suivantes, heureusement que ce forum existe !!

Après je garantie pas la propreté du code, je suis un noob XD



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