2013-04-08 73 views
2

我有鏈接到XML文件,它位於服務器上。當用戶點擊按鈕時,他必須進行對話以將XML文件保存到本地磁盤。我確定在「a href」鏈接到XML文件,但瀏覽器打開了這個文件,而不是保存。如果我「保存鏈接爲..」一切OK。請幫我解決這個問題。如何通過點擊按鈕從服務器上下載XML文件?

更新: 服務器 - IIS。 XML文件動態創建。 onClick事件我發送到js鏈接到我的XML文件,js POST鏈接到php使用ajax。如何修改我的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']; 
    } 
?> 
+1

使用PHP,你可以這樣做,是的,但我不明白你在用Ajax做什麼。我強烈懷疑Ajax會忽略「Content-Disposition」標題。也許你可以詳細描述一下? – TRiG 2013-04-10 09:44:12

+0

如何返回到用戶保存對話框?請幫幫我。 – Andrew 2013-04-12 06:34:09

+0

問題解決!謝謝大家。 http://stackoverflow.com/questions/16041355/how-to-save-dynamically-xml-file-from-server-to-a-local-machine – Andrew 2013-04-17 09:41:08

回答

7

XML文件應與HTTP頭Content-Disposition: attachment來服務。這告訴瀏覽器下載文件而不是打開它。當然,Content-Type標題也必須適當地設置(application/xml是通用XML mime類型)。如何添加HTTP標頭取決於您的服務器配置:請編輯您的問題以添加一些細節。

在Apache中.htaccess,這是

Header set Content-Disposition attachment 

在其他服務器上,它會有所不同。

+1

你讀過我的回答?我告訴過你如何用Apache中的.htaccess來做到這一點;我告訴過你,這在其他服務器上會有所不同。我要求你編輯你的問題來澄清你正在使用的服務器。 – TRiG 2013-04-09 16:49:31

+1

啊,對於IIS我不知道。 (順便說一句,**編輯你正在使用的問題的服務器;不要將這些信息留在註釋**中。)還要編輯問題以澄清這是一個**靜態XML文件**,而不是動態XML數據,然後將問題標記爲重新打開(這不是一個愚蠢的行爲,並且沒有被其他問題回答)。 – TRiG 2013-04-09 16:51:30

+0

更新我的問題 – Andrew 2013-04-10 08:53:28

0

最簡單的方法是使你鏈接到一個PHP文件,並有一個PHP文件包含類似

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

應該強制文件被視爲下載。

+0

添加了'Content-Type' – 2013-04-08 15:04:16

+0

可以讓downvoter告訴我他們爲什麼downvoted?我以前使用這種代碼沒有問題... – 2013-04-08 15:07:53

+0

*聳肩*。 Wasnae我。 – TRiG 2013-04-08 15:10:12