2013-09-05 20 views
0

我不知道如何做到這一切的最佳方式(只是PHP,PHP + JavaScript的...):文檔生成,力下載,並刷新頁面

我必須允許用戶發送某種形式生成的數據報告文件與以前生成的其他文件一起列出,每個文件都帶有一個鏈接以供下載。我希望允許用戶在生成後立即保存它(content-disposition header)。如果他們不想要,鏈接仍然可以在列表中找到。

所以,我試圖通過發送一個「Content-Disposition:attachment」頭文件。一切都很好(文件存儲在服務器中,以便從提到的鏈接獲得進一步的可用性,並且它也發送給用戶,以便他們可以一次將其存儲在他們的系統中)。問題是報告列表不會在新報告中更新,因爲我無法同時在響應中獲取刷新的HTML(可以嗎?)。

我試過發送位置標題也,但這似乎打破了以前的功能。

你可能認爲我是個白癡,但爲了在發送表單後在列表中顯示新創建的文件,我也嘗試使用javascript代替Content-Disposition頭,這樣一旦文件被創建,一個腳本調用window.open(),但是這導致在瀏覽器中打開文件(一個CSV文件):純文本。我的另一種選擇是首先爲新創建的報告提供HTML,再加上一個腳本,通過ajax向服務器發起第二個調用,然後PHP將這次的文件內容發送回Content-Disposition標頭。但是這對我來說似乎太多了。或者它是在單一用戶交互中做到這一點的最佳和最常見的方式?

您認爲如何?

回答

1

,你通過AJAX返回的文件名,我會用你的方法,然後使用window.open()但與此創建一個.htaccess文件你在哪裏存儲您的.csv文件,並添加AddType application/octet-stream .csv應強制下載。

+0

似乎是一個不錯的解決方案。將MIME類型更改爲csv文件有什麼缺陷嗎? –