0

使用 Android 版 Air+AS3 时,如何从服务器下载 png?

另外,我在哪里存储它以便以后可以使用它而无需再次下载?

问候米尔扎

4

1 回答 1

0
  1. 更好地将您的文件存储在 ApplicationStoragePath 中,这样您就可以避免一些安全(访问被拒绝)问题。
  2. 确保 writeBytesToFile() 也需要指定带有文件扩展名的文件路径(如“images/first.png”)

    private function download(url:String):void
    {
        var urlRequest:URLRequest = new URLRequest();
        urlRequest.url = url;
    
        var urlStream:URLStream = new URLStream();
        urlStream.addEventListener(Event.COMPLETE,onDownload_CompleteHandler);
        urlStream.addEventListener(IOErrorEvent.IO_ERROR, onDownload_IOErrorHandler);
        urlStream.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS,onDownload_ResponseStatusHandler);
        urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onDownload_SecurityHandler);   
        urlStream.load(urlRequest); 
    }
    
    protected function onDownload_CompleteHandler(event:Event):void
    {
        var urlStream:URLStream = event.currentTarget as URLStream;
        var outBytes:ByteArray = new ByteArray;         
        urlStream.readBytes(outBytes,0,urlStream.bytesAvailable);           
        writeBytesToFile(outBytes);
    }   
    
    
    private function writeBytesToFile(outBytes:ByteArray):void
    {
        var fileToWrite:File = File.applicationStorageDirectory.resolvePath("path/to/store/filenamewithextension");//Where you want store 
    
        var fileStream:FileStream = new FileStream();  
        fileStream.addEventListener(Event.CLOSE, onFileStream_CloseHandler);
        fileStream.addEventListener(IOErrorEvent.IO_ERROR,onFileStream_IOErrorHandler);
        fileStream.openAsync(fileToWrite, FileMode.WRITE);  
        fileStream.writeBytes(outBytes, 0, outBytes.length);
        fileStream.close();
    }
    
    protected function onFileStream_CloseHandler(event:Event = null):void
    {
        trace("File successfully downloaded ");                 
    }
    
    protected function onFileStream_IOErrorHandler(event:IOErrorEvent):void
    {
        trace("File can't downloaded file doesn't exist ");
    }
    
    protected function onDownload_SecurityHandler(event:SecurityErrorEvent):void
    {
        logger.error("onDownload_SecurityHandler :: " + event.text);            
    }
    
    protected function onDownload_ResponseStatusHandler(event:HTTPStatusEvent):void
    {
        trace("onDownload_ResponseStatusHandler :: " + event.status);
    }
    
    protected function onDownload_IOErrorHandler(event:IOErrorEvent):void
    {
        trace("onDownload_IOErrorHandler :: " + event.text);            
    }
    
于 2012-11-18T07:38:38.073 回答