打开word文档损坏

时间:2013-04-15 08:15:10

标签: c# asp.net office-interop

我正在尝试将Word文档(在ASP .NET服务器和Microsoft.Office.Interop.Word中生成)发送到客户端,但每次我尝试在客户端使用IE9打开时,它都说它可以'打开它,因为它已损坏,但如果我尝试保存并打开它,它工作正常。那问题出在哪里?

以下是代码:

        string nombreDoc = @"C:\tempDocs\Test.doc";
        generateIndex(nombreDoc); //this is an internal operation using Interop.Word
        FileStream sourceFile = new FileStream(nombreDoc, FileMode.Open);
        float FileSize;
        FileSize = sourceFile.Length;
        byte[] getContent = new byte[(int)FileSize];
        sourceFile.Read(getContent, 0, (int)sourceFile.Length);
        sourceFile.Close();
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Cache.SetNoServerCaching();
        HttpContext.Current.Response.Buffer = true;
        HttpContext.Current.Response.ContentType = "application/vnd.ms-word.document";
        HttpContext.Current.Response.AddHeader("Content-Length", getContent.Length.ToString());
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=Test.doc");
        HttpContext.Current.Response.BinaryWrite(getContent);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
        File.Delete(nombreDoc);

我尝试使用WriteFile而不是BynaryWrite,问题仍然存在。

3 个答案:

答案 0 :(得分:1)

将内容类型更改为八位字节流,并恢复为使用WriteFile而不是BinaryWrite

Response.ContentType = "application/octet-stream";

答案 1 :(得分:1)

虽然我的回复可能不会完全回答你的问题,但我遇到了ASP.Net&的另一个问题。办公自动化。 我学到了很难的建议: Microsoft support

我所做的是改为制作Windows服务,用于创建Word文档,就像您尝试的方式一样,并在服务器上创建文件。 然后,服务将在数据库和数据库中写入文件的路径。 ASP.Net页面将发送该文件以供下载。基本上,通过ASP.Net避免Office Automation

答案 2 :(得分:1)

这通常是因为您的服务器启用了输出压缩。基本上,您的服务器在写入输出流之前尝试GZip二进制文档。 Google将向您展示如何验证是否已启用压缩以及如何禁用压缩。