在 Mac OS Sierra 上的 Adobe AIR 应用程序中出现流错误 #2032,需要帮助
Emerging Stream Error #2032 in Adobe AIR application on Mac OS Sierra, help needed
我正试图通过 Adobe AIR 应用程序帮助一位客户,该应用程序突然停止在 Mac OS Sierra 上工作。我没有自己开发应用程序,所以我正在尽力解决问题。它本质上是一个用 Actionscript 3 编写的 Flex 应用程序。当我调试时,我发现我收到以下错误:
[ERROR] 错误 #2032:流错误。
该应用程序的工作方式是,它首先向服务器发出 Web 请求,并获得包含多首歌曲的 XML。没问题。
之后,应用程序下载 XML 结果中的第一首歌曲并开始播放。
当第一首歌曲开始播放时,应用程序会下载 XML-list 中的第二首歌曲,下载完成后,它会开始下载下一首,依此类推。下载的文件好像比较大,有好几MB。
所以第一个下载工作正常,但所有其他曲目下载失败并出现 Stream Error #2032。似乎我没有从失败的请求中得到任何响应 headers,只有第一个。我在服务器上有一个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 的 event-listeners,它是触发 IOError 的 urlloader。
发生过两次的奇怪的事情是应用程序突然开始正常工作并连续下载所有文件。几分钟后,它又开始出现问题,但没有任何效果。我真的很难理解错误在哪里。我不是 Adobe AIR/Flex-expert,所以也许你能给我指出正确的方向?我几乎要放弃这个了。
谢谢!
- 尝试更改目的地,可能您没有权限
写在那里。
- 使用最新的AIR SDK
如果你能分享它复制的项目会更好,这样我就可以检查我的机器
我正试图通过 Adobe AIR 应用程序帮助一位客户,该应用程序突然停止在 Mac OS Sierra 上工作。我没有自己开发应用程序,所以我正在尽力解决问题。它本质上是一个用 Actionscript 3 编写的 Flex 应用程序。当我调试时,我发现我收到以下错误:
[ERROR] 错误 #2032:流错误。
该应用程序的工作方式是,它首先向服务器发出 Web 请求,并获得包含多首歌曲的 XML。没问题。
之后,应用程序下载 XML 结果中的第一首歌曲并开始播放。
当第一首歌曲开始播放时,应用程序会下载 XML-list 中的第二首歌曲,下载完成后,它会开始下载下一首,依此类推。下载的文件好像比较大,有好几MB。
所以第一个下载工作正常,但所有其他曲目下载失败并出现 Stream Error #2032。似乎我没有从失败的请求中得到任何响应 headers,只有第一个。我在服务器上有一个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 的 event-listeners,它是触发 IOError 的 urlloader。
发生过两次的奇怪的事情是应用程序突然开始正常工作并连续下载所有文件。几分钟后,它又开始出现问题,但没有任何效果。我真的很难理解错误在哪里。我不是 Adobe AIR/Flex-expert,所以也许你能给我指出正确的方向?我几乎要放弃这个了。
谢谢!
- 尝试更改目的地,可能您没有权限 写在那里。
- 使用最新的AIR SDK
如果你能分享它复制的项目会更好,这样我就可以检查我的机器