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

  • 相关阅读:
    java RSA 加签验签【转】
    json遍历 分别使用【原】
    oracle 递归和connect by【转】
    css before after基本用法【转】
    Java Web基础——Action+Service +Dao三层的功能划分
    JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
    UUID
    在ssh框架中service-action-jsp-formbeam-dao的调用顺序
    Singleton模式(单例模式)
    真正理解、区分Action,Service和Dao功能
  • 原文地址:https://www.cnblogs.com/bwzydr/p/8432215.html
Copyright © 2020-2023  润新知