【问题标题】:Making a dynamically generated file available for download使动态生成的文件可供下载
【发布时间】:2011-01-01 18:22:26
【问题描述】:

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

我已经把它包装成一个 web 方法,所以我需要添加一个 _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

抱歉,前面没有提到,但是 AJAX 请求正在调用 webmethod!

【问题讨论】:

    标签: asp.net vb.net download


    【解决方案1】:

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

    Content-Disposition 标头似乎是正确的,但是,文本文件的正确 mime 类型 (ContentType) 是 text/plain

    【讨论】:

    • 我通过 ajax 请求 (jquery) 调用它的事实会阻止保存对话框出现吗?我已经完成了一切,它似乎工作得很好..
    • @Radu - 这是您省略的相当详细的信息。 AJAX 响应可能会导致这些标头被忽略,所以是的,可能的原因。
    • @Radu - 链接线程上的方法看起来很有希望(创建一个 IFrame 以生成新的下载)。 sencha.com/forum/…west-wind.com/weblog/posts/76293.aspx#106904
    • 谢谢!我可能会解决 AJAX 而不是使用 IFrames,我会按照你的建议尝试使用 OutputStream。
    【解决方案2】:

    听起来像一个通用处理程序 (*.ashx) 文件非常适合这里

    【讨论】:

    • 可能很理想,但这仅在此应用程序的特定实例中使用。
    • 我不明白你的意思。您总是出于特定原因编写通用处理程序,例如显示图片的缩略图,从数据库中的特定表中获取图像等。为什么通用处理程序不适合这种情况?
    • 我说它很合适,但没有必要,因为它不会被多次使用。我错过了重点吗?
    • 是的,因为我为通用处理程序命名的其他原因也可能是它们被使用的原因
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多