ajax接收二进制文件并转化成int,string等

1.  ajax请求服务器二进制文件的方法。

//二进制Ajax请求
            var xmlhttpbinary;
            //获得请求url的参数
            function GetRequest() {
                    //向服务器发送异步请求
                    xmlhttpbinary = null;
                    if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc.
                        xmlhttpbinary = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {// code for IE6, IE5
                        xmlhttpbinary = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    if (xmlhttpbinary != null) {
                        xmlhttpbinary.responseType = "blob"; //这里要用blob
                        xmlhttpbinary.onreadystatechange = blobxpr_state_Change;
                        xmlhttpbinary.open("GET", "test3.txt", true);
                        xmlhttpbinary.send(null);
                    }
                    else {
                        alert("Your browser does not support XMLHTTP.");
                    }
            }

注释:xmlhttpbinary的请求类型应该是blob

2. 接收返回的数据

function blobxpr_state_Change() {
            if (xmlhttpbinary.readyState == 4) {// 4 = "loaded"
                if (xmlhttpbinary.status == 200) {// 200 = "OK"
                    var bigblob = xmlhttpbinary.response;
                    var reader = new FileReader();
                    var smallblob;
                    smallblob = bigblob.slice(0, 22);                    
                    reader.readAsArrayBuffer(smallblob);
                    reader.onloadend = function (evt) {     //filereader加载blob成功处理函数
                        var buffer = evt.target.result;
                        //读取int                        
                        var dv = new DataView(buffer);
                        var a5 = dv.getInt32(0);
                        //读取string
                        var enc = new TextDecoder();
                        var abc = enc.decode(buffer);
                        alert("获得字符串 " + abc);
                        document.getElementById("demo").innerHTML = abc;
                    }
                }
                else {
                    alert("Problem retrieving XML data:" + xmlhttpbinary.statusText);
                }
            }
        }

注释,转int时用DataView.getInt32()函数,注意用C#转int至byte[]的顺序与getInt32()函数的顺序相反。87,100,0,0   0,0,100,87,需要注意下。C#写二进制文件时,结尾会有3个byte的莫名字符,decode()的时候需要将这3个字符去掉。

 

posted @ 2018-02-08 16:44  不务正业的人  阅读(282)  评论(0编辑  收藏  举报