2009-05-29 9 views
1

Je me demandais comment convertir un fichier que j'ai sur mon serveur (pdf/excel/ppt) en ByteArray. La raison pour laquelle je veux faire ceci est d'afficher la boîte de dialogue ouvrir/enregistrer en tant qu'utilisateur et je dois définir le Content-Type à octet-stream. Le dialogue montre bien avec juste navigateToURL() mais pour les pdf il est le paramètre de navigateur local de l'utilisateur. Pour un URLRequest, je dois définir les données en tant que ByteArray. Je suis en train d'utiliser le code situé ici:Comment puis-je convertir un fichier en un ByteArray dans Flex?

Custom printing with Flex

Répondre

5

Pourvu que vous ciblez Flash Player 10, cela devrait fonctionner:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="loadFile()"> 

    <mx:Script> 
     <![CDATA[ 

      private var loadedFile:ByteArray; 

      private function loadFile():void 
      { 
       var request:URLRequest = new URLRequest("http://test.enunciato.org/sample.pdf"); 
       var urlLoader:URLLoader = new URLLoader(request); 

       urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete); 
       urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
       urlLoader.load(request); 
      } 

      private function onURLLoaderComplete(event:Event):void 
      { 
       loadedFile = event.target.data; 
      } 

      private function saveLoadedFile():void 
      { 
       var file:FileReference = new FileReference(); 
       file.save(loadedFile, "SampleDoc.PDF"); 
      } 

     ]]> 
    </mx:Script> 

    <mx:Button label="Save Image" horizontalCenter="0" verticalCenter="0" click="saveLoadedFile()" /> 

</mx:Application> 

En supposant que vous chargez d'abord le fichier - dans cet exemple, l'opération de chargement se produit sur creationComplete et les octets sont stockés hors de loadedFile - les octets doivent être prêts à être sauvegardés lorsque l'utilisateur clique sur Enregistrer l'image. Testé et vérifié l'exemple fonctionne. J'espère que cela aide!

0

Je pense que vous pouvez faire quelque chose comme ça pour aller chercher le tableau d'octets:

private var fileBytes:ByteArray = null; 

private static function loadByteArray(url:String):void { 
     var loader:Loader = new Loader(); 

     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
     function(e:Event):void { 
     fileBytes = e.currentTarget.bytes; 
     }); 
     loader.load(new URLRequest(encodeURI(url))); 
} 

// static initializer 
{ loadByteArray("my url here"); } 

Edit: Je n » t tester la fonction ci-dessus. Si vous voulez charger des octets directement, je suggérerais d'utiliser la réponse de Christian Nunciato, puisque c'est mieux et testé. Cependant, il semble que vous souhaitiez récupérer un fichier directement à partir de votre serveur plutôt que d'effectuer un trajet tripartite (le fichier provient du serveur, vous renvoyez les octets au serveur, puis ils reviennent). au client). Dans ce cas, vous pouvez essayer de définir le type de contenu et la disposition du contenu en pièce jointe sur le serveur (par exemple, pour pdf, cela signifie que le type de contenu est "application/pdf" et "Content-Disposition: attachment; pdf "à vos en-têtes de réponse).

Questions connexes