URLStream 在我的 flex AIR 应用程序中引发 Error#2029

Posted

技术标签:

【中文标题】URLStream 在我的 flex AIR 应用程序中引发 Error#2029【英文标题】:URLStream throws Error#2029 in my flex AIR app 【发布时间】:2011-05-03 23:10:27 【问题描述】:

在我的 AIR 应用程序中,我正在尝试使用 URLStream 实现文件下载器。

公共类 FileDownloader // 从 Internet 下载文件的类 // 每次数据到达时调用的函数 // 使用下载量的参数调用 public var onProgress :Function = function(loaded:Number, total:Number):void; 公共 var onComplete :Function = function():void; 公共变量远程路径:字符串=“”; 公共 var localFile :File = null; 公共变量运行:布尔=假; 公共变量流:URLStream; 私有变量文件访问:文件流; 公共函数文件下载器(远程路径:字符串=“”,本地文件:文件=空) this.remotePath = 远程路径; this.localFile = localFile; 公共函数加载():无效 尝试 流=空; if( !stream || !stream.connected ) 流 = 新 URLStream(); 文件访问 = 新文件流(); var requester :URLRequest = new URLRequest(remotePath); var currentPosition :uint = 0; var downloadCompleteFlag :Boolean = false; // 下载完成后调用 oncomplete 的函数 // 所有数据都已写入磁盘 fileAccess.addEventListener("outputProgress", function (result):void 如果(结果.bytesPending == 0 && 下载完成标志) 流.close(); 文件访问.close(); 运行=假; onComplete(); ); fileAccess.openAsync(localFile, FileMode.WRITE); fileAccess.addEventListener(IOErrorEvent.IO_ERROR,函数(e:IOErrorEvent) trace('remotePath: '+remotePath); trace('写入时出现 io 错误 ....'+e.toString()); ); stream.addEventListener(IOErrorEvent.IO_ERROR,函数(e:IOErrorEvent) trace('remotePath: '+remotePath); trace('流存在 IO 错误:'+e.text); ); stream.addEventListener(“进度”,函数(e:ProgressEvent):无效 var bytes :ByteArray = new ByteArray(); var thisStart :uint = currentPosition; currentPosition += stream.bytesAvailable; // ^^ 确保异步不会破坏任何东西 尝试 //trace('正在读取'+remotePath+' ...'); stream.readBytes(字节,thisStart); fileAccess.writeBytes(字节,thisStart); 捕捉(错误:错误) trace('remotePath: '+remotePath); trace('从...写入字节时出错'+err.name+':'+err.message); 如果(流。连接) 流.close(); 中止(); onComplete(); 返回; onProgress(e.bytesLoaded, e.bytesTotal); ); stream.addEventListener(“完成”,函数():无效 下载完成标志=真; ); 流加载(请求者); 别的 // 做一些不可描述的事情 运行=真; 捕捉(错误:错误) trace('下载文件时出错:'+err); 公共函数中止():无效 尝试 流.close(); trace('流关闭'); 运行=假; 捕捉(错误:错误) trace('中止下载时出错'); 跟踪(错误);

我只是简单地创建上述类的一个对象并传递 url 和文件并调用加载函数。对于某些文件,我收到以下错误。

远程路径:http://mydomain.com/238/6m_608-450.jpg
从...写入字节时出错错误:错误 #2029:此 URLStream 对象没有打开流。

这意味着错误来自我正在使用的文件流(fileAccess)。我无法弄清楚为什么会发生这种情况。如果我尝试在浏览器中打开 url http://mydomain.com/238/6m_608-450.jpg,它会正确打开。这对于某些文件是随机发生的。可能是什么问题?

【问题讨论】:

【参考方案1】:

我已经在我的办公室尝试过,它对我有用(适用于不同的文件和文件大小)。 那么,你能描述一下不适合你的文件(或类型文件)吗(如果可以的话,发布一个 url)? 我想说的是,当您使用 readBytes 方法时,您的流(即 URLStream)会一直关闭。

更多,我给我一些建议: 1/ 使用 flash 的常量而不是简单的字符串 2/不要忘记在操作完成后移除你的监听器 3/ 你的方法 FileDownloader 很混乱。如果它是一个函数,则使用小写字母;如果将其用作构造函数,则使用大写字母和类名。对我来说,这个函数必须是构造函数。

【讨论】:

以上是关于URLStream 在我的 flex AIR 应用程序中引发 Error#2029的主要内容,如果未能解决你的问题,请参考以下文章

Flex / adobe air 错误收集服务

Adobe AIR SDK 和 Flex SDK 的关系?

适用于高性能Flash / Flex / AIR应用程序的大多数可扩展Web堆栈?

使用 javascript 的 flex air 移动通信

Adobe Flex/AIR Maven 集成

反编译Adobe AIR应用程序