我的目标是获取一些表单输入,并提示用户在单击某个按钮后下载所有内容的摘要。一旦下载文件我就不需要该文件,因此我想要一个解决方案,将数据直接传输给用户。我目前的解决方案甚至没有提示用户下载。谁能指出我做错了什么?
我把它包装成webmethod,因此我需要添加_Default页面类的定义,以便我可以访问某些内容。
Public Shared Sub SaveText(ByVal Text As String)
Dim d As New _Default
Dim FileName As String = System.IO.Path.GetRandomFileName()
Using sw As New System.IO.StreamWriter(d.Server.MapPath(FileName + ".txt"))
sw.WriteLine(Text)
sw.Close()
End Using
Dim fs As System.IO.FileStream = Nothing
fs = System.IO.File.Open(d.Server.MapPath(FileName + ".txt"), System.IO.FileMode.Open)
Dim btFile(fs.Length) As Byte
fs.Read(btFile, 0, fs.Length)
fs.Close()
With HttpContext.Current.Response
.AddHeader("Content-disposition", "attachment;filename=output.txt")
.AddHeader("Content-Length", btFile.Length.ToString)
.ContentType = "application/octet-stream"
.BinaryWrite(btFile)
.End()
End With
End Sub
很抱歉,之前没有提到,但是webmethod正在被AJAX请求调用!
答案 0 :(得分:4)
不是写入文件系统,而是使用MemoryStream
来保存数据库中的数据,或者更好的是,直接写入Response.OutputStream
。
Content-Disposition
标题似乎是正确的,但是,文本文件的正确mime-type(ContentType)为text/plain
。
答案 1 :(得分:0)
听起来像通用处理程序(* .ashx)文件完全适合