为什么Word不能直接打开我生成的docx,但是可以在首先保存到磁盘时打开它?

时间:2011-10-19 15:31:26

标签: c# asp.net download

我正在生成* .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的奇怪行为,当用户在显示下载时单击“打开”按钮时,单词2010将启动并指出“Word在尝试打开文件时遇到错误”。如果用户选择先将文件保存在某处,则word会打开保存的文档。

我尝试过不同的内容类型,缓存和编码选项,但无济于事。什么可能导致这种行为的线索?

3 个答案:

答案 0 :(得分:2)

IE文件下载非常愚蠢。一切都通过浏览器的缓存来调解。当启动外部程序来加载文件时,IE很可能从缓存中删除该文件,然后单词管理开始并尝试访问该文件。

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

答案 1 :(得分:1)

在最后一行添加Response.End();

答案 2 :(得分:0)

事实证明,这是Office 2010的信任设置存在的问题。禁用某些信任检查解决了问题:

http://answers.microsoft.com/en-us/office/forum/office_2010-word/word-experienced-an-error-trying-to-open-the-file/07b539fa-c641-e011-9767-d8d385dcbb12

据我所知,没有办法解决服务器端的这个问题。