2010-10-21 19 views
8

Ho un elenco di file con la casella di controllo per ogni file, se l'utente controlla molti file e fare clic su download devo comprimere tutti quei file e scaricarlo ... come negli allegati di posta. .scaricare più file come zip in .net

ho usato il codice menzione in questo post for single file download

pls aiutano come scaricare più file come zip ..

risposta

22

È necessario comprimere i file e scrivere un risultato in una risposta. È possibile utilizzare la libreria di compressione SharpZipLib.

Codice esempio:

Response.AddHeader("Content-Disposition", "attachment; filename=" + compressedFileName + ".zip"); 
Response.ContentType = "application/zip"; 

using (var zipStream = new ZipOutputStream(Response.OutputStream)) 
{ 
    foreach (string filePath in filePaths) 
    { 
     byte[] fileBytes = System.IO.File.ReadAllBytes(filePath); 

     var fileEntry = new ZipEntry(Path.GetFileName(filePath)) 
     { 
      Size = fileBytes.Length 
     }; 

     zipStream.PutNextEntry(fileEntry); 
     zipStream.Write(fileBytes, 0, fileBytes.Length); 
    } 

    zipStream.Flush(); 
    zipStream.Close(); 
} 
+0

È grandioso ... meritevole di un upvote. Sai se esiste un modo in tempo reale per conoscere la dimensione compressa? Voglio essere in grado di comunicare ai miei utenti la dimensione di ciò che scaricheranno se compressi. – pearcewg

+1

@pearcewg, penso che in questo caso la soluzione dipenda dal tuo fabbisogno. Se sai quale sarà il contenuto degli archivi, puoi comprimere i file prima della generazione della pagina e mostrare solo le dimensioni degli archivi. Se il contenuto degli archivi può variare, è un compito non banale. I miei pensieri sono: 1. metti le informazioni sulla dimensione dei file compressi nel database 2. mostra le dimensioni approssimative dei file compressi in base alle statistiche di compressione. – bniwredyc

+0

funziona come un fascino. Grazie –

1

Creare un file ZIP al volo usando http://www.icsharpcode.net/opensource/sharpziplib/.

+0

è possibile creare nel formato rar ,,, – deepu

+0

@deepu probabilmente sarà necessario utilizzare rar.exe per creare un file rar. – Fedearne

+0

Questa discussione ha alcune informazioni riguardanti RAR: http://stackoverflow.com/questions/1025863/read-content-of-rar-files-using-c. –

0

I 3 librerie io conosco sono SharpZipLib (formati versatili), DotNetZip (tutto ZIP), e ZipStorer (piccolo e compatto). Nessun link, ma sono tutti su codeplex e trovati tramite google. Le licenze e le funzionalità esatte variano.

Felice codifica.

3

Questo è il modo per farlo nel modo DotNetZip: DI garantire per DotNetZip perché ho usato ed è di gran lunga la libreria di compressione più semplice per C# che ho incontrato :)

check http://dotnetzip.codeplex.com/

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

Creare un zip scaricabile all'interno di ASP.NET. Questo esempio crea uno zip in modo dinamico all'interno di un metodo di postback ASP.NET, quindi scarica tale file zip nel browser richiedente tramite Response.OutputStream. Nessun archivio zip è mai stato creato su disco.

public void btnGo_Click (Object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.BufferOutput= false; // for large files 
    String ReadmeText= "This is a zip file dynamically generated at " + System.DateTime.Now.ToString("G"); 
    string filename = System.IO.Path.GetFileName(ListOfFiles.SelectedItem.Text) + ".zip"; 
    Response.ContentType = "application/zip"; 
    Response.AddHeader("content-disposition", "filename=" + filename); 

    using (ZipFile zip = new ZipFile()) 
    { 
    zip.AddFile(ListOfFiles.SelectedItem.Text, "files"); 
    zip.AddEntry("Readme.txt", "", ReadmeText); 
    zip.Save(Response.OutputStream); 
    } 
    Response.Close(); 
} 
+0

Ciao .. Grazie per questa bella risposta .. Ma voglio sapere se posso cambiare il nome del file prima di aggiungere in zip (prima del comando zip.AddFile). Sto parlando del file che verrà aggiunto nello ZIP, non il nome del file zip. –

Problemi correlati