使用MemoryStream&时损坏.docx的StreamWriter

时间:2018-02-22 12:56:55

标签: vb.net httpresponse memorystream

我正在为我的服务器原型化一种方法,以便向用户提供从数据库动态创建的文档。作为概念验证,我创建了一个非常简单的WebApp,旨在通过单击按钮提供.docx文件。

    Private Sub lbWord_Click(sender As Object, e As EventArgs) Handles lbWord.Click
    Using ms As New MemoryStream
        Dim streamWord = New StreamWriter(ms)
        streamWord.WriteLine("Loads of stuff")
        For index = 1 To 10
            streamWord.WriteLine(String.Format("Number {0}", index))
        Next
        streamWord.Flush()
        Response.Clear()

        Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
        Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToShortDateString + "_Test.docx")
        Response.AddHeader("Content-Length", ms.Length)
        Response.BinaryWrite(ms.GetBuffer())
    End Using
    Response.End()
    HttpContext.Current.ApplicationInstance.CompleteRequest()
End Sub

不幸的是,每当我在下载MS Word后打开.docx时都会将其标记为已损坏。

我怀疑它与a)没有正确关闭响应或b)文件末尾的附加字节有关。但我无法弄清楚如何纠正这个问题。我做了很多谷歌搜索并尝试了Response.End / Response.Flush / Response.Close,Response.SomethingWrite或ms.WriteTo / ms.CopyTo的变体,但它们都返回相同的损坏消息。

我是否正确使用MemoryStreams和StreamWriter,还是有更好的方法?

如果有人可以强调任何可能导致腐败的问题,我将不胜感激。

亲切的问候,

拥抱:)

0 个答案:

没有答案