2013-05-14 26 views
-1

我有一個名爲「用戶」的服務器上的文件夾。在asp.net中從網站下載一個文件夾到客戶端機器

有許多用戶使用本網站。

對於每個用戶,我創建了一個不同的文件夾。該文件夾的名稱將是用戶的名稱。

在,我有一些默認的文本文件和文件夾,名爲「上傳」任何用戶上傳

文件將被存儲在「上傳」文件夾。

因此,對於任何特定的用戶他的檔案將在「用戶/用戶名/上傳」。

現在我想從服務器備份我的電腦上的這些龐大的數據。所以我想下載名爲「用戶」的文件夾。

我的網站託管於some.com。 他們沒有給予在我的電腦上下載該數據的功能。

所以我決定爲我創建一個下載頁面。

現在的問題是如何下載這個名爲「Users」的文件夾?或者我怎樣才能將這個文件夾轉換爲zip?

+1

如果你知道在服務器中的文件夾的路徑,那麼你很可能壓縮的文件夾使用System.IO.Packaging.ZipPackage或第三方zip庫。然後,將該文件寫入響應流。 –

+0

我無法找到system.io下的包裝。你能幫我一下嗎? – Vishal

+1

您必須將該程序集添加到您的參考文獻中。這裏有一個例子:http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx –

回答

1

首先我從this link下載了一個zip文件 解壓縮它並在第三個文件夾中添加了對dll的引用。

使用區間:

Using System.IO; 
Using ICSharp.SharpZipLib.Zip; 

代碼:

ZipOutputStream zos; 
String strBaseDir; 

protected void Page_Load(object sender, EventArgs e) 
    { 
     StartZip(Server.MapPath("directory name"), "filename"); 
    } 


    protected void StartZip(string strPath, string strFileName) 
    { 
     MemoryStream ms = null; 
     Response.ContentType = "application/octet-stream"; 
     strFileName = HttpUtility.UrlEncode(strFileName).Replace('+', ' '); 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName + ".zip"); 
     ms = new MemoryStream(); 
     zos = new ZipOutputStream(ms); 
     strBaseDir = strPath + "\\"; 
     addZipEntry(strBaseDir); 
     zos.Finish(); 
     zos.Close(); 
     Response.Clear(); 
     Response.BinaryWrite(ms.ToArray()); 
     Response.End(); 
    } 


    protected void addZipEntry(string PathStr) 
    { 
     DirectoryInfo di = new DirectoryInfo(PathStr); 
     foreach (DirectoryInfo item in di.GetDirectories()) 
     { 
      addZipEntry(item.FullName); 
     } 
     foreach (FileInfo item in di.GetFiles()) 
     { 
      FileStream fs = File.OpenRead(item.FullName); 
      byte[] buffer = new byte[fs.Length]; 
      fs.Read(buffer, 0, buffer.Length); 
      string strEntryName = item.FullName.Replace(strBaseDir, ""); 
      ZipEntry entry = new ZipEntry(strEntryName); 
      zos.PutNextEntry(entry); 
      zos.Write(buffer, 0, buffer.Length); 
      fs.Close(); 
     } 
    } 

我得到這個代碼this link

我把它轉換成vb.net。下面是VB.NET用戶代碼:

進口部分:

Imports System.IO 
Imports ICSharp.SharpZipLib.Zip 

代碼:

Dim zos as ZipOutputStream 
Dim strBaseDir as String 

Public Sub btnBackUpDatabase_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBackUpDatabase.Click 

     StartZip(Server.MapPath("~/App_Data"), "Database") 

    End Sub 

    Protected Sub StartZip(ByVal strPath As String, ByVal strFileName As String) 
     Dim ms As IO.MemoryStream = Nothing 
     Response.ContentType = "application/octet-stream" 
     strFileName = HttpUtility.UrlEncode(strFileName).Replace("+"c, " "c) 
     Response.AddHeader("Content-Disposition", "attachment; filename=" & strFileName & ".zip") 
     ms = New IO.MemoryStream() 
     zos = New ZipOutputStream(ms) 
     strBaseDir = strPath & "\" 
     addZipEntry(strBaseDir) 
     zos.Finish() 
     zos.Close() 
     Response.Clear() 
     Response.BinaryWrite(ms.ToArray()) 
     Response.[End]() 

    End Sub 


    Protected Sub addZipEntry(ByVal PathStr As String) 
     Dim di As New IO.DirectoryInfo(PathStr) 
     For Each item As IO.DirectoryInfo In di.GetDirectories() 
      addZipEntry(item.FullName) 
     Next 
     For Each item As IO.FileInfo In di.GetFiles() 
      Dim fs As IO.FileStream = IO.File.OpenRead(item.FullName) 
      Dim buffer As Byte() = New Byte(fs.Length - 1) {} 
      fs.Read(buffer, 0, buffer.Length) 
      Dim strEntryName As String = item.FullName.Replace(strBaseDir, "") 
      Dim entry As New ZipEntry(strEntryName) 
      zos.PutNextEntry(entry) 
      zos.Write(buffer, 0, buffer.Length) 
      fs.Close() 
     Next 
    End Sub 
相關問題