2013-05-09 58 views
1

我能够通过ajax调用从服务器下载zip文件(2mb)并将二进制数据存储在Web存储中,因为这是不在IE中工作(7,8,9)。以下是我的代码。通过ajax下载zip文件(包含xml和图像)并将二进制数据存储在IE的localstorage中

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浏览器获取完整内容。

任何帮助!

+0

它是如何去的?我试图做类似的事情,我用jQuery做了一个AJAX请求,在响应中我可以获取CSV文件的数据或ZIP文件的数据。我使用https://github.com/eligrey/FileSaver.js从数据响应中“构建”文件。虽然一个ZIP文件生成它不起作用,但这是关于被损坏的东西。我发现你正在通过用http://stuk.github.io/jszip/中的charset = x-user-defined来覆盖MIME类型来解决这个问题,但是我没有用jQuery取得成功。任何线索? – orlybg 2014-04-05 01:16:43

回答

相关问题