2009-05-08 6 views
5

Je suis en train de créer une méthode qui ruisselle continuellement un fichier zip comme utilisateur télécharge (pour qu'il n'y a pas de diffusion en continu gaspillée)fichier zip Stream MVC.NET lancer le streaming

J'ai ajouté un Thread.sleep à simuler la latence

public override void ExecuteResult(ControllerContext context) { 
    HttpResponseBase response = context.HttpContext.Response; 

    response.Clear(); 
    response.ClearContent(); 
    response.ClearHeaders(); 
    response.Cookies.Clear(); 
    response.ContentType = ContentType; 
    response.ContentEncoding = Encoding.Default; 
    response.AddHeader("Content-Type", ContentType); 
    context.HttpContext.Response.AddHeader("Content-Disposition", 
          String.Format("attachment; filename={0}", 
          this.DownloadName)); 
    int ind = 0; 
    using (ZipOutputStream zipOStream = 
       new ZipOutputStream(context.HttpContext.Response.OutputStream)) 
    { 
     foreach (var file in FilesToZip) 
     { 
      ZipEntry entry = new ZipEntry(FilesToZipNames[ind++]); 
      zipOStream.PutNextEntry(entry); 
      Thread.Sleep(1000); 
      zipOStream.Write(file, 0, file.Length); 
      zipOStream.Flush(); 
     } 
     zipOStream.Finish(); 
    }  
    response.OutputStream.Flush(); 
} 

Il semble que la fermeture éclair ne commence pas à diffuser tant que tous les fichiers ne sont pas zippés. Y a-t-il un moyen de diffuser en continu? Peut-être avec une bibliothèque différente?

Répondre

9

En supposant que le format zip est partiel à la diffusion en continu, votre problème est que votre réponse est tamponnée par défaut. Si vous définissez HttpResponseBase.BufferOutput sur false, la diffusion devrait commencer immédiatement.

+0

Merci, vous l'avez fait. – maxfridbe

0

Je pense que vous devrez peut-être vider le flux de sortie plutôt que le zipostream pour voir toute sortie vers http. Donc, response.OutputStream.Flush() apparaitrait dans votre boucle dans ce cas. Je ne sais pas si cela permettra de résoudre votre problème.

Questions connexes