AS3中获取HTTP HEAD请求响应及Content-Length头信息的方法
获取HEAD请求的Content-Length头(ActionScript 3)
Hey there! I get it—you're trying to fetch the content-length header via an HTTP HEAD request in AS3, but since HEAD responses don't include a body, you can't grab it from the usual response content. Instead, you need to access the response headers collection from the URLLoader directly. Let's fix up your code to make this work correctly:
完整可运行代码
function GetSize():void { var request:URLRequest = new URLRequest(url); request.method = URLRequestMethod.HEAD; var loader:URLLoader = new URLLoader(); // 添加完成和错误监听 loader.addEventListener(Event.COMPLETE, DownloadFileSize, false, 0, true); loader.addEventListener(IOErrorEvent.IO_ERROR, onSizeRequestFailure); loader.load(request); } function DownloadFileSize(e:Event):void { var loader:URLLoader = URLLoader(e.target); var contentLength:String = null; // 遍历响应头数组,找到Content-Length for each(var header:URLRequestHeader in loader.responseHeaders) { // HTTP头大小写不敏感,转小写比较更稳妥 if(header.name.toLowerCase() === "content-length") { contentLength = header.value; break; } } // 处理结果 if(contentLength) { const fileSizeInBytes:Number = parseInt(contentLength); trace(`File size: ${fileSizeInBytes} bytes (${(fileSizeInBytes / 1024 / 1024).toFixed(2)} MB)`); // 这里可以把结果传给其他业务逻辑 } else { trace("Warning: Content-Length header not found in the response"); } // 清理监听,避免内存泄漏 cleanupLoaderListeners(loader); } function onSizeRequestFailure(e:IOErrorEvent):void { trace(`Failed to retrieve file size: ${e.text}`); cleanupLoaderListeners(URLLoader(e.target)); } // 复用的清理函数 function cleanupLoaderListeners(loader:URLLoader):void { loader.removeEventListener(Event.COMPLETE, DownloadFileSize); loader.removeEventListener(IOErrorEvent.IO_ERROR, onSizeRequestFailure); }
关键要点说明
- 访问
responseHeaders:URLLoader通过responseHeaders属性暴露所有响应头,它是一个URLRequestHeader对象数组,每个对象包含name(头名称)和value(头值)属性。 - 大小写不敏感匹配: HTTP头是大小写不敏感的,将头名称转成小写后再比较,能确保不管服务器以什么格式返回(比如
Content-Length或content-length)都能匹配到。 - 错误处理: 务必添加
IOErrorEvent监听器,处理请求失败的情况(比如网络问题、服务器错误等)。 - 清理监听器: 请求完成或失败后移除事件监听器,避免应用出现内存泄漏问题。
内容的提问来源于stack exchange,提问作者Amir Rasti
相关产品推荐
相关产品推荐

