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浏览器获取完整内容。
任何帮助!
它是如何去的?我试图做类似的事情,我用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