2014-01-14 40 views
0

我是使用JSZIP的新手,可能會問一個明顯的問題。但在這裏:在.Net Web App中上傳(使用JSZIP)時,需要從客戶機上壓縮選定的文件。壓縮文件應該上傳到服務器位置

我正在使用文件上載控件上傳文件到服務器。 源文件位於客戶端的路徑中。目標文件應該在服務器上。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>jszip demo</title> 
     <script type="text/javascript" src="../Scripts/jszip.js"></script> 
     <script type="text/javascript" src="../Scripts/jszip-load.js"></script> 
     <script type="text/javascript" src="../Scripts/jszip-deflate.js"></script> 
     <script type="text/javascript" src="../Scripts/jszip-inflate.js"></script> 

     <script type="text/javascript"> 

      function zipFileAndUpload() 
      { 
       var myFileUploadControl1 = document.getElementById('myFileUploadControl1'); 
       var FILENAMEABSOLUTE = myFileUploadControl1.value; 

       var zip = new JSZip(FILENAMEABSOLUTE); 
       zip.file(FILENAMEABSOLUTE); 
       var content = zip.generate({ type: "blob" }); 
       // 
       // Other Code Here 
       // 
      } 

     </script> 
    </head> 
     <body> 
      <form id="form1" runat="server"> 
       <asp:FileUpload ID="myFileUploadControl1" runat="server"/> 
       <input type="button" value="Select File" onclick="zipFileAndUpload()"/> 
      </form> 
     </body> 
     </html> 

我的要求是,當客戶端選擇文件時,它應該在JavaScript中使用JSZIP壓縮,然後上傳到服務器。

我試圖找到解決方案,但沒有得到任何東西。 另外我的解決方案,我已經嘗試到現在還沒有奏效。

  1. 我需要讀取'myFileUploadControl1'選擇的客戶端計算機上的文件。
  2. 將文件壓縮並保存在本地RAM或客戶機中。
  3. 在SERVER路徑上之後,在服務器上上傳。

任何人都可以幫助我嗎?

+0

爲什麼不使用gzip或deflate?沒有額外的代碼需要。現在,這在大多數客戶中也可以使用 –

+0

我需要像這樣 - [(演示JSZIP)](http://gildas-lormeau.github.io/zip.js/demos/demo1.html)....唯一的區別是,我需要有文件上傳到服務器而不是下載它們。 – user3195852

回答

0

一旦你的壓縮文件被構建,你可以使用jQuery將它發佈到服務器上,如下所示。

var zipData = zip.generate({ type: "base64" }); 

var formData = new FormData(); 
formData.append('zipData', zipData); 

var postToServer = $.ajax({ 
    type: "POST", 
    url: "Upload", // My server-side MVC controller has an action named Upload 
    data: formData, 
    processData: false, 
    contentType: false, 
}); 

postToServer.done(function() { 
    ... 
}); 

postToServer.fail(function(jqXHR, textStatus) { 
    ... 
}); 

在服務器端,您將需要代碼來接收數據流,並使用您選擇的任何服務器端技術將其保存在那裏。