2009-05-29 10 views
1

私は自分のサーバー上のファイル(pdf/excel/ppt)をByteArrayに変換する方法を知りました。私がこれをやりたいのは、ダイアログを開いてユーザーを保存することです。コンテンツタイプをオクテットストリームに設定する必要があります。ダイアログはうまくnavigateToURL()で表示されますが、pdfではユーザーのローカルブラウザの設定です。 URLRequestの場合、データをByteArrayとして設定する必要があります。FlexでファイルをByteArrayに変換するにはどうすればよいですか?

Custom printing with Flex

答えて

5

あなたは、これは動作するはずのFlash Player 10をターゲットにしている提供:

<?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> 

は、あなたが最初のファイルをロードすると仮定 - この例では、ロード操作がのcreationCompleteで発生し、バイトがでオフに格納されますloadedFile - ユーザーがイメージの保存をクリックすると、バイトが保存され、保存準備が整う必要があります。サンプルの動作をテストし、検証しました。それが役に立てば幸い!

0

私はあなたがバイト配列フ​​ェッチするために、このような何かを行うことができると思う:

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"); } 

編集を:私はdidnの」私はここにあるコードを使用しようとしています上記の機能をテストします。バイトを直接ロードする場合は、Christian Nunciatoの答えを使用することをお勧めします。

しかし、3ウェイトリップ(ファイルはサーバーから来て、サーバーに戻してから最後に戻ってきます)とは対照的に、サーバーから直接ファイルを取得するように思えますクライアントに送信する)。その場合、コンテンツタイプとコンテンツの処理をサーバー上の添付ファイルに設定することができます(例:pdfの場合、コンテンツタイプを "application/pdf"に設定し、 "Content-Disposition:attachment; filename = myFileName" pdf "をあなたの応答ヘッダーに追加する)。

関連する問題