その場で作成したWord文書をブラウザにストリーミングできません。Microsoft 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();
}
}
私はたくさんのリンクを見てきましたが、何もうまくいきません。私は多くの人が使用し、一部の人は使用しています–現時点では、正しい方法がわかりません。また、私はより長いコンテンツタイプを試しましたが、運がありません。MemoryStream.WriteTo
BinaryWrite
application/vnd.openxmlformats-officedocument.wordprocessingml.document
一部のスクリーンショット–回復しようとしても、同じ「パーツが欠落しているか無効」になります
この質問につまずいた人のための解決策:
using
のディレクティブ内でWordProcessingDocument
、次を呼び出す必要があります。
wordDocument.Save();
また、を正しくストリーミングするMemoryStream
には、これを外側のusingブロックで使用します。
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();