Mam to poniższy kod na wniesienie załączników strony do użytkownika:Dlaczego pliki .docx są uszkodzone podczas pobierania ze strony 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();
}
Problemem jest to, że wszystkie obsługiwane pliki działa poprawnie (JPG, GIF, PNG, PDF, doc itp), ale pliki .docx, po pobraniu są uszkodzone i muszą zostać naprawione przez Office w celu otwarcia.
Na początku nie wiedziałem, czy problem polegał na dekompresji pliku zip zawierającego plik .docx, więc zamiast zapisywać plik wyjściowy tylko w odpowiedzi, zapisałem go najpierw, a plik otworzył się pomyślnie, więc Wiem, że problem powinien dotyczyć pisania odpowiedzi.
Czy wiesz, co może się dziać?
ten potknął się, gdy mi wyprowadzania PDF. Okazuje się, że przeglądarki plików PDF będą tolerować nieoczekiwane śmieci po zakończeniu poprawnych danych, a ja dodałem wyrenderowany kod HTML strony do każdego wysyłanego pliku PDF. Może być tak samo w przypadku innych formatów plików binarnych, nie interesują ich nieoczekiwane dane dołączone do ważnych danych. – millimoose