Как реализовать обратный вызов для загрузки файла? - PullRequest
0 голосов
/ 29 апреля 2011

Я написал скрипт, который загружает файл из сети, используя URL-адрес файла. У меня есть ActiveXObject следующего типа.

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

Прекрасно работает для файлов небольшого размера, размер файла менее 100 МБ. Но когда я пытаюсь загрузить файл размером более 100 МБ, мой скрипт зависает. Тогда я попробовал,

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 голосов
/ 08 мая 2011

Возможно, зависание является результатом цикла 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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...