2009-05-28 5 views
4

J'ai une page de téléchargement où il y a 3 options de téléchargement: Word, Zip et PDF. Il y a un dossier contenant .doc fichiers. Lorsqu'un utilisateur clique sur l'option Zip de la page, je veux ASP.NET pour compresser le dossier avec les fichiers .doc dans un fichier temporaire .zip. Ensuite, le client va le télécharger depuis le serveur. Lorsque le téléchargement de l'utilisateur est terminé, le fichier Zip temporaire doit être supprimé. Comment faire cela avec ASP.NET 2.0 C#?Comment puis-je générer un fichier Zip temporaire, puis le supprimer automatiquement après le téléchargement?

Remarque: Je sais comment je peux compresser et décompresser des fichiers et supprimer des fichiers du système avec C# ASP.NET 2.0.

Répondre

0

Je fixe mon problème en ajoutant cela à la fin du code de flux:

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

Vous souhaiterez diffuser le fichier zip manuellement à l'utilisateur, puis supprimer le fichier une fois la diffusion terminée.

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

tout response.write dans le client d'action envoyer 2 demande Post et Get au serveur. dans la première action son bloc d'entrée bla bla bla que d'entrer Enfin bloquer et supprimer le fichier .. et déclencher l'événement à nouveau et essayer de télécharger le fichier mais il est tempzP fichier cuz son enlevé en première demande ... SOO Comment puis-je résoudre ce problème? –

7

En utilisant DotNetZip vous pouvez enregistrer le fichier zip directement au Response.OutputStream. Pas besoin d'un fichier Zip temporaire.

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

pouvez-vous dire quelle dll vous utilisez pour la méthode ZipFile() ???? – Siddiqui

+0

comme je l'ai dit dans le post, ce code utilise DotNetZip - disponible à http://dotnetzip.codeplex.com. Si ce n'est pas ce que vous voulez dire, je ne sais pas ce que vous demandez. – Cheeso

+1

J'ai téléchargé le code de votre lien, puis il y avait deux DLL, Ionic.zip.dll et Ionic.ziplib.dll, que je demandais quelle DLL. Mais j'ai testé les deux et trouvé Ionic.Zip.dll pour ma tâche d'exigence. Merci pour votre message précieux. – Siddiqui

2

Form Téléchargement DataBase Et Zip Et Complate télécharger Supprimer Pour utiliser ce code dans le besoin de classe à l'aide 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(); 
       } 
      } 
Questions connexes