【发布时间】: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,它会正确打开。这对于某些文件是随机发生的。可能是什么问题?
【问题讨论】:
标签: apache-flex actionscript-3 air