小编Dot*_*ver的帖子

C#从OpenXML返回内存流导致损坏的word文件

我有一个来自OpenXML的MemoryStream的问题.我成功打开一个Word文件,更改它并通过HttpResponse下载它,如果我在一个方法中执行所有步骤.

但是如果我尝试通过返回MemoryStream在两个不同的类(或方法)中执行它,我会得到一个损坏的word文件.我想到了冲洗或缓冲问题,但我没有找到解决方案.

这是工作代码:

    public void FillTemplateOpenXmlWord(HttpResponse response)
    {
        string filePath = @"c:\template.docx";
        byte[] filebytes = File.ReadAllBytes(filePath);

        using (MemoryStream stream = new MemoryStream(filebytes))
        {
            using (WordprocessingDocument myDoc = WordprocessingDocument.Open(stream, true))
            {
                // do some changes
                ...
                myDoc.MainDocumentPart.Document.Save();
            }

            string docx = "docx";
            response.Clear();
            response.ClearHeaders();
            response.ClearContent();
            response.AddHeader("content-disposition", "attachment; filename=\"" + docx + ".docx\"");
            response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
            stream.Position = 0;
            stream.CopyTo(response.OutputStream);
            response.End();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是非工作代码:

    public void OpenFile(HttpResponse response)
    {
        MemoryStream stream = this.FillTemplateOpenXmlWord();

        string docx = "docx";
        response.Clear();
        response.ClearHeaders(); …
Run Code Online (Sandbox Code Playgroud)

.net c# memorystream ms-word openxml

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

memorystream ×1

ms-word ×1

openxml ×1