2010-04-19 14 views
6

Ich habe einen Ordner auf meinem Webserver, der Hunderte von MP3-Dateien enthält. Ich möchte die Option für einen Benutzer bereitstellen, ein gezipptes Archiv von jedem mp3 in dem Verzeichnis von einer Webseite herunterzuladen.ASP.NET Alle Dateien als Zip herunterladen

Ich möchte die Dateien nur bei Bedarf programmgesteuert komprimieren. Da die Zip-Datei sehr groß sein wird, denke ich, dass ich die ZIP-Datei an den Antwortstream senden muss, da es aus Leistungsgründen gezippt wird.

Ist das möglich? Wie kann ich es tun?

+0

Sobald Sie Ihre Antwort zu bekommen, müssen Sie Kompression auszuschalten, wenn Dateien in der Zip-Datei hinzufügen ... MP3-Dateien komprimieren Dont sehr gut .... –

+0

Natürlich, weil sie bereits komprimiert sind . Danke für die Erinnerung. –

Antwort

7

Hier Code verwende ich diese mit DotNetZip zu tun - funktioniert sehr gut. Offensichtlich müssen Sie die Variablen für outputFileName, folderName und includeSubFolders bereitstellen.

response.ContentType = "application/zip"; 
response.AddHeader("content-disposition", "attachment; filename=" + outputFileName); 
using (ZipFile zipfile = new ZipFile()) { 
    zipfile.AddSelectedFiles("*.*", folderName, includeSubFolders); 
    zipfile.Save(response.OutputStream); 
} 
+1

Wenn Sie nicht möchten, dass Ihr Verzeichnis Teilbaum im Zip-Archiv, verwenden Sie einfach die Methode überladen 'zipfile.AddSelectedFiles (" *. * ", OrdnerName, direcotryInZip, includeSubFolders);' – marquito

+0

@marquito In der Tat denke ich, die akzeptiert Die Antwort wäre besser, wenn sie diese Überlastung benutzt hätte. – stephen

+0

hey Ray, ich brauche eine kleine Hilfe bei der Erstellung von zip-Dateien. WENN du helfen kannst. lass es mich hier wissen. Es würde mich freuen :) Danke – BNN

1

Sie könnten einen benutzerdefinierten Handler (.ashx-Datei) hinzufügen, der den Dateipfad übernimmt, die Datei liest, sie mithilfe einer Komprimierungsbibliothek komprimiert und die Bytes an den Endbenutzer mit dem richtigen Inhaltstyp zurückgibt.

4

Ich kann nicht glauben, wie einfach das war. Nach this Lesen, hier ist der Code, den ich verwendet:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.BufferOutput = false; 
    Response.ContentType = "application/zip"; 
    Response.AddHeader("content-disposition", "attachment; filename=pauls_chapel_audio.zip"); 

    using (ZipFile zip = new ZipFile()) 
    { 
     zip.CompressionLevel = CompressionLevel.None; 
     zip.AddSelectedFiles("*.mp3", Server.MapPath("~/content/audio/"), "", false); 
     zip.Save(Response.OutputStream); 
    } 

    Response.Close(); 
} 
0
  foreach (GridViewRow gvrow in grdUSPS.Rows) 
      { 
        CheckBox chk = (CheckBox)gvrow.FindControl("chkSelect"); 
       if (chk.Checked) 
       { 
       string fileName = gvrow.Cells[1].Text; 

       string filePath = Server.MapPathfilename); 
       zip.AddFile(filePath, "files"); 
       } 
      } 
      Response.Clear(); 
      Response.AddHeader("Content-Disposition", "attachment; filename=DownloadedFile.zip"); 
      Response.ContentType = "application/zip"; 
      zip.Save(Response.OutputStream); 
      Response.End(); 
Verwandte Themen