0

Мой код Javascript, который выполняется на стороне клиента, должен читать двоичный файл, который хранится на сервере. Как я могу сделать это для всех браузеров?Чтение двоичного файла из Javascript (multibrowser)

Я нашел решения с ActiveXObject - FileSystemObject, которые работают только в Internet Explorer.

Благодаря

+1

Вы уверены, что javascript - серверная? Если да, то почему вас беспокоит браузер? Клиентский javascipt работает в браузере. Не сервер. – Eric

+0

Что вам нужно для анализа из двоичного файла? – Eric

+1

на стороне сервера javascript .. вы имеете в виду классический .asp с javascript (страницы, начинающиеся с @ Language = "JavaScript" или язык сервера по умолчанию javascript)? –

ответ

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, чтобы получить файл. с асинхронным вызовом callback с аргументами сам объект xhr (вы должны прочитать свойство responseText) и был ли он успешным. Синхронно возвращает двоичные данные.

+0

Спасибо! Будет ли этот вызов ActiveXObject работать в Google Chrome? Я считаю, что это только для IE. – Arturo

+0

Да, объект ActiveXObject используется только в IE. Сначала он пытается просто выполнить «новый XMLHttpRequest()», который является стандартом W3C – pbfy0

1

для классического ASP на стороне сервера JavaScript (из старого сервера документов у меня есть)

как это на стороне сервера все браузер будет загружать файл, в данном случае этот кусок кода не было предоставить прямой доступ к файлу и был использован после проверки входа в систему.

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(); 
    } 
}