我正在生成* .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会打开保存的文档。
我尝试过不同的内容类型,缓存和编码选项,但无济于事。什么可能导致这种行为的线索?
答案 0 :(得分:2)
IE文件下载非常愚蠢。一切都通过浏览器的缓存来调解。当启动外部程序来加载文件时,IE很可能从缓存中删除该文件,然后单词管理开始并尝试访问该文件。
您正在输出无缓存标头,这肯定会告诉word不缓存文件。这有效地使文件不可下载:IE将下载然后立即删除该文件,因为它不应该被缓存。
答案 1 :(得分:1)
在最后一行添加Response.End();
。
答案 2 :(得分:0)
事实证明,这是Office 2010的信任设置存在的问题。禁用某些信任检查解决了问题:
据我所知,没有办法解决服务器端的这个问题。