0

我正在尝试将 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 并且问题仍然存在。

4

3 回答 3

1

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

于 2013-04-15T08:40:32.257 回答
1

尽管我的回复可能无法完全回答您的问题,但我遇到了 ASP.Net 和办公自动化的另一个问题。我学到了不推荐的艰难方法: Microsoft 支持

我所做的是我创建了一个 Windows 服务,它用于创建一个 Word 文档,就像您尝试做的那样并在服务器上创建一个文件。然后服务将在数据库中写入文件的路径,ASP.Net 页面将发送该文件以供下载。基本上,避免通过 ASP.Net 实现办公自动化

于 2013-04-15T08:34:42.580 回答
1

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

Response.ContentType = "application/octet-stream";
于 2013-04-15T08:24:13.090 回答