【问题标题】:How to download XML file from server on click button?如何在单击按钮上从服务器下载 XML 文件?
【发布时间】:2024-01-03 00:29:01
【问题描述】:

我有 XML 文件的链接,该文件位于服务器上。当用户单击按钮时,他必须采取对话框将 XML 文件保存到本地磁盘。我确定“a href”中指向 XML 文件的链接,但浏览器打开了这个文件,而不是保存。如果我“将链接另存为..”一切正常。请帮我解决这个问题。

更新: 服务器 - IIS。 XML 文件动态创建。 onClick 事件我发送到 js 链接到我的 XML 文件,js POST 链接到使用 ajax 的 php。如何修改我的 php 以打开“保存对话框”来保存 XML 文件? js:

 function funk(url)
    {
    var ajax = getRequest();
    ajax.onreadystatechange = function()
    {
        if(ajax.readyState == 4)
        {
         ...
        }
    }
    ajax.open("POST", "/do_query.php", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    var data = 'info='+url;
    ajax.send(data);
    }

php (do_query.php):

<?php
  if (isset($_POST['info'])) 
  {
    $info = $_POST['info'];
  }
?>

【问题讨论】:

  • 使用 PHP,你可以做到,是的,但我不明白你在用 Ajax 做什么。我强烈怀疑 Ajax 会忽略 Content-Disposition 标头。也许您可以更详细地描述一下?
  • 如何返回用户保存对话框?请帮帮我。
  • 问题解决了!谢谢大家。 *.com/questions/16041355/…

标签: php html xml download


【解决方案1】:

应使用 HTTP 标头 Content-Disposition: attachment 提供 XML 文件。这告诉浏览器下载文件而不是打开它。当然,Content-Type 标头也必须适当设置(application/xml 是通用 XML mime 类型)。添加 HTTP 标头的方式取决于您的服务器配置:请编辑您的问题以添加一些详细信息。

在 Apache .htaccess 中,它是

Header set Content-Disposition attachment

在其他服务器中,会有所不同。

【讨论】:

  • 你看我的回答了吗?我告诉过你如何在 Apache 中使用 .htaccess 来做到这一点;我告诉过你,在其他服务器中会有所不同;我让你编辑你的问题以澄清你正在使用哪个服务器。
  • 啊,对于 IIS,我不知道。 (顺便说一句,将您正在使用的服务器编辑到问题中;不要将该信息隐藏在 cmets 中。)同时编辑问题以澄清这是一个 静态 XML 文件,不是动态 XML 数据,然后将问题标记为重新打开(这不是欺骗,并且其他问题没有回答)。
【解决方案2】:

最简单的方法是制作一个链接到的 php 文件,并让该 php 文件包含类似的内容

<?php
header('Content-Type: application/xml;');
header('Content-Disposition: attachment; filename=blah.xml;');
readfile('blah.xml');

这应该强制文件被视为下载。

【讨论】:

  • 投反对票的人能告诉我他们投反对票的原因吗?我以前用过这种代码没有问题...
  • 也不是我。但也许他们知道Content-Disposition 存在兼容性问题。 最简单和最兼容的方式是Content-Type: application/octet-stream
  • @PointedEars:“也许他们知道 Content-Disposition 存在兼容性问题”——参考?
最近更新 更多