我试图通过突然停止在Mac OS Sierra上运行的Adobe AIR应用程序帮助客户端。我自己还没有开发应用程序,所以我尽力解决问题。它本质上是一个用ActionScript 3编写的Flex应用程序。当我调试时,我可以看到我收到以下错误:
[错误]错误#2032:流错误。
应用程序的工作方式是首先向服务器发出Web请求,并获取包含多首歌曲的XML。没问题。
之后,应用程序将下载XML结果中的第一首歌并开始播放。
当第一首歌曲开始播放应用程序时,然后在XML列表中下载第二首歌曲,当下载完成后,它开始下载下一首歌曲,依此类推。正在下载的文件似乎相当大,有几个MB。
因此第一次下载工作正常,但所有其他音轨下载失败,出现Stream Error#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的事件侦听器,它是触发IOError的urlloader。
两次发生的奇怪事情是应用程序突然开始正常工作并连续下载所有文件。然后几分钟后它开始再次起作用,没有任何作用。我真的很难理解错误所在。我不是Adobe AIR / Flex专家,所以也许你可以指出我正确的方向?我非常接近放弃这个。
谢谢!
答案 0 :(得分:3)
如果您将分享它所复制的项目,那么我会检查我的机器
会好得多