2017-08-19 56 views
0

我試圖從web服務器以編程方式使用javascript下載zip文件,並面臨着存檔遭到破壞的挑戰。正在下載zipfile導致文件損壞

我使用下面的函數來下載

function download(){ 
     var http = new XMLHttpRequest(); 
     http.open("GET", 'http://jadonchemicals.com/sample.zip'); 
     http.setRequestHeader("dataType", "jsonp"); 
     http.onreadystatechange = function() { 
      if (http.readyState == 4 && http.status == 200) 
      { 
       var blobdata=new Blob([http.responseText], {type: "application/zip"}); 
      var a = document.createElement("a"); 
      a.href = window.URL.createObjectURL(blobdata); 
      a.click(); 
      } 
     }; 
      http.send(); 
} 

我收到以下錯誤,當我嘗試打開存檔

a) The file header is corrupt 
b) unexpected end of archive 

作爲一個例子,而在下載sample.zip文件這個鏈接,該文件下載到975k的大小。 http://jadonchemicals.com/Blobtozip/

當我嘗試通過鏈接腳本到一個按鈕做編程使用JavaScript一樣,文件大小增加至1779k和文件已損壞

我懷疑這是一個編碼問題的結果。你能建議我應該怎麼做才能解決?

回答

0

你可以這樣下載的JavaScript文件:

<iframe id="my_iframe" style="display:none;"></iframe> 
<script> 
function Download(url) { 
    document.getElementById('my_iframe').src = url; 
}; 
Download("http://jadonchemicals.com/sample.zip") 
</script> 

你只需要將代碼插入到HTML文檔。 我試着用這個下載你指定的文件,它是正確的975KB,並沒有損壞。

+0

謝謝@ 0liveradam8 ...我錯過了提到需求的關鍵部分。我們還需要將文件發送到雲服務器,因此希望從blob中的LocalStorage中形成文件。如果我下載,我不能自動做到這一點。建立文件是造成腐敗 – user7995357

+0

也許這個帖子https://stackoverflow.com/questions/21008732/javascript-save-blob-to-localstorage可以幫助你節省BLOB到localStorage。 – 0liveradam8