我正在构建一个 csv 文件并将其发送到浏览器。在某些安装中,额外的字符会添加到 http 响应正文的开头,它会破坏文件。
这就是我的代码的样子。
Dim File As New Text.StringBuilder
File.Append("Batch Name,")
File.Append("Batch Accepted Total")
File.AppendLine
For Each Batch In Batches
File.Append(Batch.Name)
File.Append(",")
File.AppendFormat("{0:c}", Batch.AcceptedTotal)
File.AppendLine
Next
Dim FileName = "SomeFile.csv"
Dim Encoder = Text.Encoding.UTF8
Dim FileData = Encoder.GetBytes(File.ToString)
Response.Clear
Response.ClearHeaders
Response.Buffer = True
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName)
Response.ContentType = "text/plain"
Response.OutputStream.Write(FileData, 0, FileData.Length)
Controller.FileData = Nothing
Response.Flush
Response.End
只有一些安装会这样做,而其他安装则不会。我不知道为什么。如果我交换数据库,同一个站点仍然存在问题。所以我知道它不依赖于数据。
这就是文件最终的样子
781
Batch Name,Batch Accepted Total
3/8/2013,$961.24
Lincoln Payroll,$999.99
0
第一行的 718 发生了变化。它接缝取决于文件的大小。最后多余的 0 永远不会改变,我也不知道它来自哪里。
更新: 我发现第一行是十六进制预期内容的长度。删除此行也将删除多余的字符。
Response.Flush
我仍然不知道为什么。不需要那条线,所以我已经完成了寻找修复的工作,但是如果有人知道发生了什么,我想听听。