【问题标题】:How to create and download an XML without storing it on the server如何创建和下载 XML 而不将其存储在服务器上
【发布时间】:2012-08-28 15:37:24
【问题描述】:

我有一个 ASP.NET Web 表单 应用程序。我想创建一个下载链接,让用户可以下载 XML 文件。但是,文件不必存储在服务器上。

在我的 aspx 文件中,我有下载链接(放置在 GridView 中):

 <asp:HyperLinField Text="Download" DataNavigateUrlFormatString="download.aspx?ProductId={0}" DataNavigateUrlFields="ProductId">

download.aspx.vb页面:

Dim productId As String = Request.QueryString("productId")
Dim xmlDoc As String = _ProductServices.GetXmlDocPerId(productId)
Dim xdoc As XmlDocument = New XmlDocument()
xdoc.LoadXml(xmlLicense)

现在我想创建一个文件,将 XML 内容放入其中并将其交付给用户,而不将其保存到服务器。我应该将MemoryStreamStreamReader 结合使用吗?

【问题讨论】:

    标签: xml vb.net download webforms on-the-fly


    【解决方案1】:

    可以这么简单:

    Private Sub SendResults()
             'Write the XML for the DataSet.
             Page.Response.ContentType = "text/xml"
             Page.Response.Output.Write(xmlContentAsString)
             Page.Response.End()
        End Sub
    

    本质上,您更改响应输出类型,并将 xmldocument 内容传递给输出。您实际上并没有在系统中创建文件,而是将响应流式传输到客户端。

    【讨论】:

    • 谢谢,您的代码是向用户显示下载提示还是仅显示 xml 内容?
    • 好问题。我相信它让浏览器来推断它是否可以加载。默认情况下,它会将其加载到浏览器中。但是您可以使用另一种内容类型来要求它下载文件:vbulletin.com/forum/showthread.php/…。通过使用它,如果您愿意,您可以将其作为文件下载。您必须使用该链接中提到的文件名进行处置。
    【解决方案2】:

    您无需创建文件 - 您的XmlDocument 中已有 XML 内容,您可以直接将其输出到浏览器。

    未经测试的示例:

    Response.ContentType = "application/xml"
    Response.Clear()
    
    xdoc.Save(Response.OutputStream)
    Response.Flush()
    

    更新:

    要让浏览器显示 下载 对话框,您只需添加一个content-disposition 标头:

    Response.AddHeader("Content-Disposition", "attachment; filename=some_name.xml");
    

    【讨论】:

    • 谢谢!我需要创建文件,因为我希望用户下载 XML 文件,而不仅仅是在浏览器中查看它
    • @CiccioMiami - 您仍然可以打开下载对话框,而无需创建文件。您还需要使用Content-Disposition header,但无需实际在磁盘上创建文件。
    • 谢谢,下载成功,但是xml解析错误...如果我使用下面答案中的方法,xml被正确解析但我没有下载提示...跨度>
    • @CiccioMiami - 该描述不是很有帮助。也许你可以再问一个问题并解释其中的解析错误。
    • 好的,我明白了这个问题,只需使用 'Response.End()' 而不是 'Response.Flush()'
    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多