gpt4 book ai didi

c# - 为什么Word不能直接打开我生成的docx,但是先存盘就可以打开?

转载 作者:行者123 更新时间:2023-11-30 22:34:26 26 4
gpt4 key购买 nike

我正在生成一个 *.docx 文件服务器端,我想在按下按钮时返回给用户。在按钮的事件处理程序中,我目前将文档数据生成为 byte[](在以下代码示例中称为 bytes),并将其返回给用户,如下所示:

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=Test.docx;");
Response.AddHeader("Content-Length", bytes.Length.ToString(CultureInfo.InvariantCulture));
Response.ContentType = "application/vnd.ms-word.document.12";
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(bytes);
Response.Flush();
Response.Close();

这会导致 IE 出现奇怪的行为,即当用户在显示下载内容时单击“打开”按钮时,Word 2010 会启动并显示“Word 在尝试打开文件时遇到错误”。但是,如果用户选择先将文件保存在某个地方,Word 会很好地打开保存的文档。

我尝试过不同的内容类型、缓存和编码选项,但均无济于事。任何可能导致此行为的线索?

最佳答案

IE 在文件下载方面异常愚蠢。一切都通过浏览器的缓存进行调解。当启动外部程序加载文件时,IE 很可能会在 word 设法启动并尝试访问该文件之前从缓存中删除该文件。

您正在输出无缓存 header ,这肯定会告诉 word 不要缓存该文件。这有效地使文件不可下载:IE 将下载并立即删除该文件,因为它不应该被缓存。

关于c# - 为什么Word不能直接打开我生成的docx,但是先存盘就可以打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823834/

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