使动态生成的文件可供下载

时间:2011-01-01 18:22:26

标签: asp.net vb.net download

我的目标是获取一些表单输入,并提示用户在单击某个按钮后下载所有内容的摘要。一旦下载文件我就不需要该文件,因此我想要一个解决方案,将数据直接传输给用户。我目前的解决方案甚至没有提示用户下载。谁能指出我做错了什么?

我把它包装成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请求调用!

2 个答案:

答案 0 :(得分:4)

不是写入文件系统,而是使用MemoryStream来保存数据库中的数据,或者更好的是,直接写入Response.OutputStream

Content-Disposition标题似乎是正确的,但是,文本文件的正确mime-type(ContentType)为text/plain

答案 1 :(得分:0)

听起来像通用处理程序(* .ashx)文件完全适合