我正在尝试帮助一个客户解决Adobe AIR应用程序在Mac OS Sierra上突然停止工作的问题。我自己还没有开发该应用程序,所以我正在尽我所能来解决这个问题。它本质上是一个用Actionscript 3编写的Flex应用程序。当我调试时,我可以看到我得到以下错误:
[错误]错误#2032:数据流错误。
应用程序的工作方式是首先向服务器发出一个Web请求,然后得到一个包含多首歌曲的XML。
之后,应用程序下载XML结果中的第一首歌曲并开始播放。
当第一首歌曲开始播放时,应用程序会下载XML列表中的第二首歌曲,当下载完成时,它会开始下载下一首歌曲,依此类推。正在下载的文件似乎相当大,有几MB。
因此,第一次下载工作正常,但所有其他曲目下载失败,流错误#2032。似乎我没有从失败的请求中得到任何响应头,只有第一个。我在服务器上有一个crossdomain.xml。
这个应用程序在Mac OS X El Capitan和Windows上运行得很好,但是在Sierra上我遇到了这个错误。代码并不复杂,它使用URLLoader发出API URL请求,并将文件保存到磁盘。我也尝试过使用URLStream代替,同样的问题。
下面是一些代码举例:
public function downloadTrack(track:Object, storeName:String, apiKey:String):void {
this.setCurrentTrack(track);
this.urlParameters.storeName = storeName;
this.urlParameters.keystring = apiKey;
this.urlLoader = new URLLoader();
this.urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
this.urlRequest = new URLRequest("/api/" + 'download/' +
this.currentTrack.id + "?time=" + new Date().getTime());
this.urlRequest.method = URLRequestMethod.POST;
this.urlRequest.data = this.urlParameters;
this.addEventListeners();
this.urlLoader.load(this.urlRequest);
}
private function loaded(e:Event):void {
this.fileData = e.target.data;
writeFile();
}
private function writeFile():void {
var filePath:String = this.currentTrack.md5 + '.ogg';
var cacheFile:File = this.downloadDirectory.resolvePath('.' + filePath);
this.fileStream.addEventListener(Event.CLOSE, saveReady);
this.fileStream.openAsync(cacheFile, FileMode.WRITE);
this.fileStream.writeBytes(fileData,0,fileData.length);
this.fileStream.close();
}
在addEventListeners()方法中,添加了URLLoader的事件侦听器,并且是该urlLoader触发IOError。
一件奇怪的事情已经发生了两次,那就是应用程序突然开始正常工作,并连续下载所有文件。然后几分钟后,它又开始工作,什么都不工作。我真的很难理解错误在哪里。我不是Adobe AIR/FlexMaven,所以也许你能给我指出正确的方向?我几乎要放弃这个了。
谢谢你!
1条答案
按热度按时间6jygbczu1#
会更好,如果你将分享项目的地方,它复制,所以我可以检查我的机器