从Javascript读取二进制文件(多浏览器)

从Javascript读取二进制文件(多浏览器),javascript,internet-explorer,google-chrome,activexobject,Javascript,Internet Explorer,Google Chrome,Activexobject,在客户端运行的Javascript代码需要读取存储在服务器中的二进制文件。如何为所有浏览器执行此操作 我发现只有在Internet Explorer中才能使用ActiveXObject-FileSystemObject的解决方案 感谢经典的asp服务器端javascript(来自我的旧文档服务器) 由于是服务器端,所有浏览器都将下载该文件,在这种情况下,这段代码不是为了直接访问该文件,而是在用户登录检查后使用的 Server.ScriptTimeout=500;//this might take

在客户端运行的Javascript代码需要读取存储在服务器中的二进制文件。如何为所有浏览器执行此操作

我发现只有在Internet Explorer中才能使用ActiveXObject-FileSystemObject的解决方案


感谢经典的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();
  }
}
Server.ScriptTimeout=500//这可能需要一些时间
var docs_type=“应用程序/pdf”;
var filename=“…”//将文件名放在此处(相对路径)
var objStream=Server.CreateObject(“ADODB.Stream”);
试一试{
Open();
objStream.Type=1;//二进制
LoadFromFile(Server.MapPath(文件名));
AddHeader(“内容长度”,objStream.Size);
Response.ContentType=docs\u type;//您提供的文档类型
AddHeader(“内容处置”、“附件;文件名=您的_filename.pdf”);
而(!objStream.EOS&&Response.IsClientConnected){
Response.BinaryWrite(objStream.Read(4*1024*256));
Response.Flush();
}
objStream.Close();
Response.End();
}捕获(e){
响应。写入(“错误送达文档
”; Response.End(); } }

然后使用getBinaryData获取文件。对于异步,它将使用xhr对象本身(您将读取responseText属性)以及是否成功的参数调用回调。同步返回二进制数据。

您确定javascript是服务器端的吗?如果是的话,那你为什么关心浏览器呢?客户端javascipt在浏览器上运行。不是服务器端。您需要从二进制文件中解析什么?服务器端javascript。。你是指带有javascript的classic.asp(页面以@Language=“javascript”开头或服务器语言默认为javascript)?如果是服务器端,则浏览器与此无关。抱歉。这不是服务器端而是客户端。我很困惑,但我想说的是,要读取的文件在服务器中,而不是本地。谢谢!这个ActiveXObject调用在Google Chrome上有效吗?我相信它只适用于IE。是的,ActiveXObject只在IE中使用。它首先尝试执行新的XMLHttpRequest(),这是W3C标准
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;
}