2011-04-29 4 views
0

파일 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; 
    } 

콜백 기능을 구현하는 방법을 모르겠습니다. 누군가 내게 구현을 제공 할 수 있습니까?

감사

답변

0

아마, 매달려은 readyState가 재산의 특정 값을 기다리고 while 루프의 결과입니다. 속성이 예상 값 중 하나를 얻지 못하면 스크립트는 영원히 작동합니다.

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

이 정보가 도움이되기를 바랍니다.

+0

오, 콜백에 대한 답변을하지 못해 죄송합니다. 콜백 함수를 사용하는 것이 문제를 해결할 것이라고는 생각하지 않지만이 방법을 사용하면 다운로드가 실패 할 때 설정된 readyState 속성의 값을 찾을 수 있습니다. 간단합니다. "objHTTP.onreadystatechange = OnReadyStateChange;". 이 함수는 동일한 단위로 선언해야합니다 : function OnReadyStateChange() {/ * objHTTP는 전역 변수 */Log.Message 여야합니다 ("readState가"+ objHTTP.readyState "로 변경됨);} – Alex

+0

답장을 보내 주셔서 감사합니다. 문제는 while 루프에 없습니다. 문제는 send 메서드에서 발생합니다. 코드를 디버깅 할 때 스크립트가 send 메서드에서 중단된다는 것을 알았습니다. while 루프가 시작될 때까지 도달하지 못했습니다. –

+0

흠 ... 그러면 구성 요소의 버그처럼 보입니다. 그런 다음 ServerXMLHTTP 개체를 사용하려고합니다. 설명에 따라 다른 통신 메커니즘을 사용하므로 문제가 존재하지 않을 수도 있습니다. 귀하의 경우이 구성 요소가 작동합니까? – Alex

관련 문제