我無法將我創建的word文檔流式傳輸到瀏覽器。我不斷從Microsoft Word收到一條消息,說明文檔已損壞。使用OpenXML SDK w/ASP.NET導致內存中的Word文檔導致「損壞」文檔
當我通過控制檯應用程序運行代碼並將ASP.NET取出圖片時,正確生成文檔並沒有任何問題。我相信一切都圍繞寫下文件。
這裏是我的代碼:
using (MemoryStream mem = new MemoryStream())
{
// Create Document
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem,
WordprocessingDocumentType.Document, true))
{
// Add a main document part.
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
Body body = mainPart.Document.Body;
body.Append(new Paragraph(
new Run(
new Text("Hello World!"))));
mainPart.Document.Save();
// Stream it down to the browser
// THIS IS PROBABLY THE CRUX OF THE MATTER <---
Response.AppendHeader("Content-Disposition", "attachment;filename=HelloWorld.docx");
Response.ContentType = "application/vnd.ms-word.document";
mem.WriteTo(Response.OutputStream);
Response.End();
}
}
我有looked在很多links - 但沒有相當的工作。我很多人使用MemoryStream.WriteTo和一些使用BinaryWrite - 在這一點上,我不知道什麼是正確的方式。我也嘗試過較長的內容類型,例如application/vnd.openxmlformats-officedocument.wordprocessingml.document,但沒有運氣。
一些截圖 - 即使你試圖恢復你的那些誰在這個問題上絆倒相同的「部分缺失或無效」
解決方案:
的使用在().. WordProcessingDocument指令,您必須調用:
wordDocument.Save();
而且正確地流式傳輸的MemoryStream,在外使用塊使用此:
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
Response.AppendHeader("Content-Disposition", "attachment;filename=HelloWorld.docx");
mem.Position = 0;
mem.CopyTo(Response.OutputStream);
Response.Flush();
Response.End();
如何添加wordDocument.Save(); ?我試了一下,唯一可能的代碼是.Close(),並且它不適合我。 – RicL
感謝kd7您的問題和答案。 –