2009-06-19 6 views
1

J'utilise un site Web sur IIS6 pour l'application ASP.NET et la compression activée, ce qui fonctionne bien pour les pages Web .aspx. Ce qui ne fonctionne pas, ce sont les fichiers binaires téléchargés qui sont transmis dans le cadre d'une réponse de publication: par ex. le bouton de lien est 'download to excel' - l'utilisateur clique et le code génère un fichier binaire, fait un Response.Clear(), puis écrit le fichier dans Response.OutputStream.Envoyer une réponse compressée dans ASP.NET

Une réponse est vue par les navigateurs mais elle est toujours zéro octet. Je suppose donc que les navigateurs Web attendent une réponse compressée, et que le binaire brut n'est pas un flux compressé valide, il échoue. Je suis perplexe quant à la raison pour laquelle cela devrait être si j'ai effacé la réponse - sûrement les en-têtes de réponse (spécifiant la compression) sont également effacés?

Alors deux questions se posent:

1) Comment compresser le fichier binaire pour envoyer une réponse compressée? 2) comment puis-je vérifier au moment de l'exécution si la compression IIS est activée?

Vive

Répondre

3

je désactiver la compression et vérifier si cela fonctionne encore, juste pour isoler le fait que c'est en effet due à la compression IIS. Je vous dis que parce que je cours un site IIS/Compression activé qui fournit des fichiers PDF (binaires) sans problème.

De toute façon, voici la partie du code qui fonctionne pour moi.

Response.Clear(); 
Response.ClearHeaders(); 

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
Response.AddHeader("Content-transfer-encoding", "8bit"); 
Response.AddHeader("Cache-Control", "private"); 
Response.AddHeader("Pragma", "cache"); 
Response.AddHeader("Expires", "0"); 

Response.ContentType = "application/pdf"; 
Response.WriteFile(filePath); 

Response.Flush(); 
Response.Close(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
Questions connexes