我想知道如何将我在服务器上的文件(pdf / excel / ppt)转换为ByteArray。我想这样做的原因是为用户显示对话框打开/保存,我必须将Content-Type设置为八位字节流。对话框只显示navigateToURL(),但对于pdf,它是用户的本地浏览器设置。对于URLRequest,我必须将数据设置为ByteArray。我正在尝试使用此处的代码:
答案 0 :(得分: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中存储 - 当用户单击“保存图像”时,字节应该准备好保存。测试并验证了示例的工作原理。希望它有所帮助!
答案 1 :(得分: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"); }
编辑:我没有测试上面的功能。如果你想直接加载字节,我建议使用Christian Nunciato的答案,因为他的表现更好并且经过实际测试。
然而,这听起来更像是你想直接从你的服务器检索文件,而不是做三路旅行(文件来自服务器,你将字节发送回服务器,然后他们最终回到客户端)。在这种情况下,您可以尝试将内容类型和内容处置设置为服务器上的附件(例如,对于pdf,这将意味着将内容类型设置为“application / pdf”并添加“Content-Disposition:attachment; filename = myFileName。 pdf“到你的回复标题。)