2009-05-29 96 views
1

我想知道如何将我的服务器上的文件(pdf/excel/ppt)转换为ByteArray。我想这样做的原因是为用户显示打开/保存的对话框,我必须将Content-Type设置为八位字节流。对话只显示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"); } 

编辑:我没有” t测试上述功能。如果你想直接加载字节,我建议使用Christian Nunciato的答案,因为他更好,并且经过实际测试。

但是,它听起来更像是要直接从你的服务器检索文件,而不是做一个三路之旅(文件来自服务器,您发送的字节回服务器,最后他们回来给客户)。在这种情况下,您可以尝试设置服务器上的内容类型和内容处置方式(例如对于pdf,这意味着将内容类型设置为“application/pdf”并添加“Content-Disposition:attachment; filename = myFileName”。 PDF“到你的回应标题)。

相关问题