0

클라이언트 측에서 실행되는 자바 스크립트 코드는 서버에 저장된 이진 파일을 읽어야합니다. 모든 브라우저에서 어떻게 할 수 있습니까?Javascript (multibrowser)에서 이진 파일 읽기

Internet Explorer에서만 작동하는 ActiveXObject - FileSystemObject가있는 솔루션을 발견했습니다.

감사

는 서버 측 모든 브라우저가이 코드 조각이없는 것이었다,이 경우에는 파일을 다운로드합니다대로 (내가 가진 오래된 문서 서버에서) 기존 ASP 서버 사이드 자바 스크립트에 대한

+1

자바 스크립트가 서버 측입니까? 그렇다면 브라우저에 대해 왜 관심이 있습니까? 클라이언트 측 javascipt는 브라우저에서 실행됩니다. 서버 측이 아닙니다. – Eric

+0

바이너리 파일을 파싱하려면 무엇이 필요합니까? – Eric

+1

서버 쪽 javascript .. 당신은 자바 스크립트 (페이지는 @ Language = "JavaScript"또는 서버 언어 기본값 인 javascript로 시작됨)가있는 classic .asp를 의미합니까? –

답변

2
function getXHR(){ 
    var xhr; 
    try{ 
     xhr = new XMLHttpRequest(); 
    }catch(e){ 
     try{ 
      xhr = new ActiveXObject("MSXML2.XMLHTTP.6.0"); 
     }catch(e2){ 
      try{ 
       xhr = new ActiveXObject("MSXML2.XMLHTTP"); 
      }catch(e3){} 
     } 
    } 
    return xhr; 
} 


function getBinaryData(url, callback){ 
    var xhr = getXHR(); 
    xhr.open("GET", url, !!callback); 
    if(callback){ 
     xhr.onload = function(){callback(xhr, true)}; 
     xhr.onerror = function(){callback(xhr, false)}; 
    } 
    xhr.send(); 
    return callback ? undefined : xhr.responseText; 
} 

그런 다음 파일을 얻을 수 getBinaryData을 사용합니다. 비동기 적으로 xhr 객체 자체 (responseText 속성을 읽음)와 성공적인 지 여부를 인수로 콜백을 호출합니다. 동기식으로 이진 데이터를 반환합니다.

+0

감사! 이 ActiveXObject 호출은 Chrome에서 작동합니까? 나는 그것이 IE만을위한 것이라고 믿는다. – Arturo

+0

예, ActiveXObject는 IE에서만 사용됩니다. 먼저 W3C 표준 인'new XMLHttpRequest() '를 시도합니다. – pbfy0

1

파일에 직접 액세스하고 사용자 로그인 확인 후에 사용되었습니다.

Server.ScriptTimeout=500;//this might take some time 
var docs_type="application/pdf"; 
var filename="...";//put your filename here (relative path) 
var objStream = Server.CreateObject("ADODB.Stream"); 

try { 
    objStream.Open(); 
    objStream.Type=1;//binary 
    objStream.LoadFromFile(Server.MapPath(filename)); 
     Response.AddHeader("Content-Length", objStream.Size); 
     Response.ContentType=docs_type;//the type of document you are serving 
     Response.AddHeader("Content-Disposition", "attachment; filename=your_filename.pdf"); 
     while(!objStream.EOS&&Response.IsClientConnected) { 
      Response.BinaryWrite(objStream.Read(4*1024*256)); 
      Response.Flush(); 
     } 
    objStream.Close(); 
    Response.End(); 
    } catch(e) { 
     Response.Write("Error serving document<br>"); 
     Response.End(); 
    } 
}