2009-11-12 8 views
0

Je suis en train d'écrire dans le flux de réponse - mais il échoue, il corrompt les données en quelque sorte ...Pourquoi le contenu corrompu lors de l'écriture au flux de réponse

Je veux être en mesure de écrire un flux stocké ailleurs dans le HttpWebResponse, donc je ne peux pas utiliser 'WriteFile' pour cela, plus je veux le faire pour plusieurs types MIME mais ça échoue pour tous - mp3, pdf etc ...

public void ProcessRequest(HttpContext context) 
    { 
     var httpResponse = context.Response; 
     httpResponse.Clear(); 
     httpResponse.BufferOutput = true; 
     httpResponse.StatusCode = 200; 

     using (var reader = new FileStream(Path.Combine(context.Request.PhysicalApplicationPath, "Data\\test.pdf"), FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      var buffer = new byte[reader.Length]; 
      reader.Read(buffer, 0, buffer.Length); 

      httpResponse.ContentType = "application/pdf"; 
      httpResponse.Write(Encoding.Default.GetChars(buffer, 0, buffer.Length), 0, buffer.Length); 
      httpResponse.End(); 
     } 
    } 

Bravo à l'avance

Répondre

4

Parce que vous écrivez des caractères, pas des octets. Un personnage n'est certainement pas un octet; il doit être encodé, et c'est là que votre «corruption» entre en jeu. Faites-le comme ceci:

using (var reader = new FileStream(Path.Combine(context.Request.PhysicalApplicationPath, "Data\\test.pdf"), FileMode.Open, FileAccess.Read, FileShare.Read)) 
{ 
    var buffer = new byte[reader.Length]; 
    reader.Read(buffer, 0, buffer.Length); 

    httpResponse.ContentType = "application/pdf"; 
    httpResponse.BinaryWrite(buffer); 
    httpResponse.End(); 
} 
+0

DOH! Ça a été une longue journée :) – AwkwardCoder

+0

Dang, bat-moi à ça. +1 par exemple –