我正在为我的服务器原型化一种方法,以便向用户提供从数据库动态创建的文档。作为概念验证,我创建了一个非常简单的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,还是有更好的方法?
如果有人可以强调任何可能导致腐败的问题,我将不胜感激。
亲切的问候,
拥抱:)