2016-11-07 38 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觸發下載