1

我能够通过ajax调用从服务器下载zip文件(2mb)并将二进制数据存储在网络存储中,因为这在IE(7、8、9)中不起作用。下面是我的代码。

    var req = new XMLHttpRequest();
    req.open('GET', filename, false);
    req.onreadystatechange=function()
    {
        if (req.readyState == 4)
        {
        if(req.status!=200){
            chk_file = false;
            alert('Sorry, Error occured while downloading the question paper. HTTP Error Code: '+req.status);
        }
        }
    }
    if (req.overrideMimeType) {
        req.overrideMimeType('text/plain; charset=x-user-defined');
    } else {
        req.setRequestHeader('Accept-Charset', 'x-user-defined');
    }
    req.send('hello');

    var buffer = "";
    var dbata;
    try {
        bdata = BinaryToArray(req.responseBody).toArray();
        for (var i = 0, len = bdata.length - 1; i < len; i++) {// dbata is one byte too long. Why ???
            buffer += String.fromCharCode(bdata[i] & 0xFF);
        }
    } catch(e) {
        bdata = req.responseText;
        for (var i = 0, len = bdata.length; i < len; i++) {
            buffer += String.fromCharCode(bdata.charCodeAt(i) & 0xFF);
        }
    }

在 VB 脚本中将二进制数据转换为数组。以下是代码。

    var IE_HACK = (/msie/i.test(navigator.userAgent) &&
                    !/opera/i.test(navigator.userAgent));

    if (IE_HACK) {
        var vbScript = '<scr' + 'ipt type="text/vbscript">\n'+
            '<!-' + '-\n' +
            'Function BinaryToArray(Binary)\n'+
            '  Dim i\n'+
            '  ReDim byteArray(LenB(Binary))\n'+
            '  For i = 1 To LenB(Binary)\n'+
            '    byteArray(i-1) = AscB(MidB(Binary, i, 1))\n'+
            '  Next\n'+
            '  BinaryToArray = byteArray\n'+
            'End Function\n'+
            '--' + '>\n' +
            '</scr' + 'ipt>';

        //$(vbScript).insertAfter("script:last");
        document.write(vbScript);

将此缓冲区值存储在 html5 网络存储中。

我没有在 IE 中获得完整的内容,它在 FF、Chrome 中工作。

任何帮助!

4

1 回答 1

0

也许这可以帮助你,但猜你现在解决了这个问题,但它可能会帮助看到这个问题的人

xhr.overrideMimeType() 函数是否有跨浏览器的替代方案?

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

https://github.com/eligrey/FileSaver.js

http://stuk.github.io/jszip/

于 2014-04-05T01:39:13.237 回答