Pourquoi le contenu corrompu lors de l'écriture au flux de réponse
-
19-09-2019 - |
Question
Je suis en train d'écrire dans le flux de réponse - mais il échoue, il corrompt les données en quelque sorte ...
Je veux être capable d'écrire un flux stocké quelque part ailleurs au HttpWebResponse donc je ne peux pas utiliser « WriteFile » pour cela, plus je veux faire cela pour plusieurs types MIME mais il é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();
}
}
Vive à l'avance
La solution
Parce que vous écrivez des caractères, pas d'octets. Un personnage est certainement pas un octet; il doit être codé, et qui est où votre « corruption » vient en faire 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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow