gpt4 book ai didi

c# - 使用带有 ASP.NET 的 OpenXML SDK 在内存中流式传输 Word 文档会生成 "corrupt"文档

转载 作者:IT王子 更新时间:2023-10-29 04:50:06 24 4
gpt4 key购买 nike

我无法将我即时创建的 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();
}
}

我有looked在很多links – 但没有任何效果。我很多人使用 MemoryStream.WriteTo 并且有些人使用 BinaryWrite - 在这一点上我不确定正确的方法是什么。我也尝试过更长的内容类型,即 application/vnd.openxmlformats-officedocument.wordprocessingml.document 但没有成功。

一些屏幕截图 – 即使您尝试恢复,您也会得到相同的“部分丢失或无效”

解决这个问题的人:

WordProcessingDocumentusing 指令中,您必须调用:

wordDocument.Save();

还要正确地流式传输 MemoryStream,在外部使用 block 中使用它:

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();

enter image description here enter image description here

最佳答案

改用CopyToWriteTo有一个错误,当目标流不支持写入所有内容时,它无法写入缓冲区的全部内容去吧。

关于c# - 使用带有 ASP.NET 的 OpenXML SDK 在内存中流式传输 Word 文档会生成 "corrupt"文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com