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个字符去掉。

 

转载于:https://www.cnblogs.com/bwzydr/p/8432215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值