2010-04-19 7 views
6

J'ai un dossier sur mon serveur web qui contient des centaines de fichiers mp3. Je voudrais fournir l'option pour un utilisateur de télécharger une archive compressée de chaque mp3 dans le répertoire d'une page Web.ASP.NET Télécharger tous les fichiers comme Zip

Je veux compresser les fichiers par programmation uniquement lorsque cela est nécessaire. Parce que le fichier zip sera assez grand, je pense que je vais devoir envoyer le fichier zip au flux de réponse car il est compressé, pour des raisons de performances.

Est-ce possible? Comment puis-je le faire?

+0

Une fois que vous obtenez votre réponse, assurez-vous de désactiver la compression lors de l'ajout de fichiers dans le fichier zip ... Les fichiers MP3 dont compress très bien .... –

+0

Bien sûr, parce qu'ils sont déjà compressés . Merci pour le rappel. –

Répondre

7

Voici le code que j'utilise pour ce faire avec DotNetZip - fonctionne très bien. Évidemment, vous devrez fournir les variables pour outputFileName, folderName et includeSubFolders.

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

Dans le cas où vous ne voulez pas votre sous-arborescence de répertoire dans l'archive Zip, utilisez simplement la méthode surcharger 'zipfile.AddSelectedFiles (" *. * ", FolderName, direcotryInZip, includeSubFolders);' – marquito

+0

@marquito En fait, je pense que le accepté la réponse serait meilleure si elle avait utilisé cette surcharge. – stephen

+0

hey Ray, j'ai besoin d'une petite aide pour créer des fichiers zip. Si vous pouvez aider. fais-moi savoir ici. Il serait heureux :) Merci – BNN

1

Vous pouvez ajouter un gestionnaire personnalisé (fichier .ashx) qui prend le chemin du fichier, lit le fichier le compresse à l'aide d'une bibliothèque de compression et renvoie les octets à l'utilisateur final avec le type de contenu correct.

4

Je ne peux pas croire à quel point c'était facile. Après avoir lu this, voici le code que je:

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(); 
Questions connexes