ho questa seguente codice per portare gli allegati di pagina per l'utente:Perché i file .docx sono danneggiati durante il download da una pagina 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();
}
Il problema è che tutti i file supportati funziona correttamente (jpg, gif, png, pdf, doc, ecc), ma i file .docx, quando vengono scaricati, sono corrotti e devono essere riparati da Office per poter essere aperti.
All'inizio non sapevo se il problema era nel decomprimere il file zip che conteneva il file .docx, quindi invece di mettere il file di output solo nella risposta, l'ho salvato prima, e il file è stato aperto correttamente, quindi So che il problema dovrebbe essere alla risposta.
Sai cosa può succedere?
Questo mi ha scattato quando vengono emessi in formato PDF. Si scopre che i visualizzatori PDF tollereranno la spazzatura inaspettata dopo la fine dei dati validi, e aggiungevo HTML di rendering della pagina a ogni file PDF che stavo inviando. Potrebbe essere lo stesso per altri formati di file binari, a loro non interessa dati inaspettati aggiunti a dati validi. – millimoose