tengo el código siguiente para traer archivos adjuntos de página para el usuario:¿Por qué los archivos .docx están dañados al descargar desde una página ASP.NET?
private void GetFile(string package, string filename)
{
var stream = new MemoryStream();
try
{
using (ZipFile zip = ZipFile.Read(package))
{
zip[filename].Extract(stream);
}
}
catch (System.Exception ex)
{
throw new Exception("Resources_FileNotFound", ex);
}
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/unknown";
if (filename.EndsWith(".docx"))
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
}
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
Response.BinaryWrite(stream.GetBuffer());
stream.Dispose();
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
El problema es que todos los archivos soportados funciona correctamente (JPG, GIF, PNG, PDF, DOC, etc), pero los archivos .docx, cuando se descargan, están corruptos y necesitan ser arreglados por Office para poder abrirlos.
Al principio no sabía si el problema era descomprimir el archivo comprimido que contenía el .docx, así que en lugar de poner el archivo de salida solo en la respuesta, lo guardé primero y el archivo se abrió correctamente, por lo que Sé que el problema debería estar en la redacción de respuestas.
¿Sabes lo que puede estar pasando?
Esto me tropezó cuando se emiten PDF. Resulta que los lectores de PDF tolerarán la basura inesperada después del final de los datos válidos, y yo estaba agregando el HTML renderizado de la página a cada archivo PDF que estaba enviando. Puede ser el mismo para otros formatos de archivo binarios, no les importan los datos inesperados agregados a datos válidos. – millimoose