2016-11-07 36 views
0

我创建了一个函数来下载一个用于多个文件的压缩文件以用于共享点。如何在IE中使用jszip下载Zip文件?

function create_zip() { 
    var zip = new JSZip(); 

    $.each(filePathArray, function (i, path) { 

     var filename = path; //"file" + i +".txt"; 
     var filee = path.substring(path.lastIndexOf('/') + 1); 

     var fileURL = appweburl + "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('" + filename + "')/[email protected]='" + hostweburl + "'";//$('#file').attr('href'); 
     var request = $.ajax({ 
      url: fileURL, 
      type: "GET", 
      contentType: "text/plain", 

      mimeType: 'text/plain; charset=x-user-defined' // <-[1] 
     }); 

     request.done(function (data) { 
      //var filee = "MoveFiles" + count + ".txt"; 
      zip.file(filee, data, { binary: true }); // <- [2] 
      //count++; 
      vfilecount++; 
      console.log(vfilecount); 
      console.log(vfilecount); 

      if (count == vfilecount) { 
       zip.generateAsync({ type: "base64" }).then(function (data) { 

        location.href = "data:application/zip;base64," + data; 

       }); 

      } 

     }); 
    }); 
    } 

现在这段代码适用于Chrome和Mozilla,但不适用于IE。 请以任何方式提出建议。

回答

0

https://github.com/Stuk/jszip/issues/376看到的(在这里重新发布它来帮助其他人):

  • mimeType: 'text/plain; charset=x-user-defined'不能在IE 10 $.ajax工作是为了下载文本内容,而不是二进制内容。与XmlHttpRequest一样,没有设置responseType。浏览器将尝试解码从UTF8接收到的内容并破坏它(因为它是一个二进制内容,而不是文本)。使用jQuery插件(如jquery.binarytransport.js)或直接使用xhr(与xhr.responseType = "blob")。
  • location.href = "data:application/zip;base64," + ...在IE中不起作用。生成一个blob,并使用saveAs触发下载