2009-05-28 102 views
4

我有一個下載頁面,有3個下載選項:Word,Zip和PDF。有一個文件夾包含.doc文件。當用戶單擊頁面上的Zip選項時,我希望ASP.NET將帶有.doc文件的文件夾壓縮到臨時.zip文件中。然後客戶端將從服務器下載它。當用戶的下載完成時,臨時Zip文件應該自行刪除。如何生成臨時Zip文件,然後在下載後自動刪除它?

如何使用ASP.NET 2.0 C#做到這一點?

注意:我知道如何使用C#ASP.NET 2.0壓縮和解壓縮文件並從系統中刪除文件。

回答

0

我加入這個到流碼的一端固定我的問題:

Response.Flush(); 
Response.Close(); 
if(File.Exist(tempFile)) 
{File.Delete(tempFile)}; 
0

您需要手動將zip文件流式傳輸到用戶,然後在流式傳輸完成後刪除文件。

try 
{ 
    Response.WriteFile("path to .zip"); 
} 
finally 
{ 
    File.Delete("path to .zip"); 
} 
+0

刪除 對於使用此代碼在需要時類中的Response.Write行動客戶端發送請求2 POST和GET到服務器。在第一次行動它的進入嘗試塊bla bla bla比輸入finally塊和刪除文件..並再次發生火災事件,並嘗試下載文件,但有tempziP文件cuz它的第一個請求中刪除... SOO我該如何解決這個問題? – 2009-05-28 21:37:51

7

使用DotNetZip你可以直接將zip文件保存到Response.OutputStream。不需要臨時的Zip文件。

Response.Clear(); 
    // no buffering - allows large zip files to download as they are zipped 
    Response.BufferOutput = false; 
    String ReadmeText= "Dynamic content for a readme file...\n" + 
         DateTime.Now.ToString("G"); 
    string archiveName= String.Format("archive-{0}.zip", 
             DateTime.Now.ToString("yyyy-MMM-dd-HHmmss")); 
    Response.ContentType = "application/zip"; 
    Response.AddHeader("content-disposition", "attachment; filename=" + archiveName); 
    using (ZipFile zip = new ZipFile()) 
    { 
     // add a file entry into the zip, using content from a string 
     zip.AddFileFromString("Readme.txt", "", ReadmeText); 
     // add the set of files to the zip 
     zip.AddFiles(filesToInclude, "files"); 
     // compress and write the output to OutputStream 
     zip.Save(Response.OutputStream); 
    } 
    Response.Flush(); 
+0

你能告訴你使用ZipFile()方法的哪個dll嗎? – Siddiqui 2011-10-10 07:37:12

2

表格下載從數據庫,ZIP和Complate下載使用ICSharpCode.SharpZipLib.Zip

if (ds.Tables[0].Rows.Count > 0) 
      { 
       // Create the ZIP file that will be downloaded. Need to name the file something unique ... 
       string strNow = String.Format("{0:MMM-dd-yyyy_hh-mm-ss}", System.DateTime.Now); 
       ZipOutputStream zipOS = new ZipOutputStream(File.Create(Server.MapPath("~/TempFile/") + strNow + ".zip")); 
       zipOS.SetLevel(5); // ranges 0 to 9 ... 0 = no compression : 9 = max compression 

       // Loop through the dataset to fill the zip file 
       foreach (DataRow dr in ds.Tables[0].Rows) 
       { 
        byte[] files = (byte[])(dr["Files"]); 
        //FileStream strim = new FileStream(Server.MapPath("~/TempFile/" + dr["FileName"]), FileMode.Create); 
        //strim.Write(files, 0, files.Length); 
        //strim.Close(); 
        //strim.Dispose(); 
        ZipEntry zipEntry = new ZipEntry(dr["FileName"].ToString()); 
        zipOS.PutNextEntry(zipEntry); 
        zipOS.Write(files, 0, files.Length); 
       } 
       zipOS.Finish(); 
       zipOS.Close(); 

       FileInfo file = new FileInfo(Server.MapPath("~/TempFile/") + strNow + ".zip"); 
       if (file.Exists) 
       { 
        Response.Clear(); 
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
        Response.AddHeader("Content-Length", file.Length.ToString()); 
        Response.ContentType = "application/zip"; 
        Response.WriteFile(file.FullName); 
        Response.Flush(); 
        file.Delete(); 
        Response.End(); 
       } 
      } 
相關問題