如何实现文件下载回调?

时间:2011-04-29 05:37:35

标签: scripting scripting-language testcomplete

我写了一个脚本,使用文件URL从网上下载文件。我有一个以下类型的ActiveXObject。

var objHTTP = new ActiveXObject("MSXML2.XMLHTTP");  
objHTTP.open("GET", strFileURL, false);

它适用于小尺寸文件,文件大小小于100MB。但是当我尝试下载大小超过100MB的文件时,我的脚本被挂起了。然后我试了,

objHTTP.open("GET", strFileURL, true);

但在这种情况下,我们必须实现一个回调函数。我不知道如何实现回调然后使用它。有人可以帮助我。我正在使用TestComplete 7.我写的脚本;

var objHTTP = new ActiveXObject("MSXML2.XMLHTTP"); 
  objHTTP.open("GET", strFileURL, true); 
  objHTTP.onreadystatechange = Callback; 
  objHTTP.send();  
  while((objHTTP.readyState != 4) && (objHTTP.readyState != 'complete'))  
  {   
    Delay(100); 
  }  
  if(200 != objHTTP.Status)  
  {  
    Log.Error("The " + strFileURL + " file was not found." + " The returned status is " + objHTTP.Status); 
    return;  
  }  

我不知道如何实现回调函数。有人能为我提供实施吗?

由于

1 个答案:

答案 0 :(得分:0)

挂起可能是while循环等待readyState属性的特定值的结果。如果属性永远不会获得预期值之一,则脚本将永远有效。

我认为MSXML2.XMLHTTP对象无法加载大文件,也从未将readyState设置为脚本期望的值之一。要了解究竟发生了什么,我会检查该属性在很长一段时间后具有的值,这对于加载文件或尝试失败(例如2小时)来说已经足够了。如果您知道下载失败时readyState属性的值,您可以在脚本中处理它以避免挂起。

这就是悬挂本身。现在关于文件下载问题的原因。我找到了一个告诉问题的页面并建议设置更高的超时 - 看看: http://edgylogic.com/blog/downloading-large-files-vbscript/

示例在VBScript中,但使用JScript实现相同的方法应该很容易。请注意,该示例使用不同的COM对象--ServerXMLHTTP。你可以在这里阅读它(包括XMLHTTP的差异): http://msdn.microsoft.com/en-us/library/ms762278(v=VS.85).aspx

我希望这会有所帮助。

相关问题