¿Por qué el contenido que está siendo dañado al escribir en secuencia de respuesta
-
19-09-2019 - |
Pregunta
Estoy tratando de escribir a la secuencia de respuesta - pero está fallando, que está corrompiendo los datos de alguna manera ...
Quiero ser capaz de escribir un flujo almacenado en otro lugar a la HttpWebResponse así que no puedo utilizar 'escritura de archivo' para esto, además de lo que quiero hacer esto para varios tipos MIME pero falla para todos ellos - 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();
}
}
Saludos de antemano
Solución
Debido a que usted está escribiendo caracteres, no por bytes. Un personaje no es definitivamente un byte; tiene que ser codificado, y que es donde su "corrupción" viene en hacerlo de esta manera en su lugar:.
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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow