2009-07-03 73 views
0

我需要爲用戶提供一個可下載的HTML版本的統計頁面。我走到這一步,爲創建一個控制器動作,將設置標題如下然後渲染並返回我的香草HTML頁面:rails:模擬「保存頁面爲」行爲

headers["Content-Type"] ||= 'application/x-unknown' 
headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 

這將使瀏覽器彈出打開下載對話框,而不是渲染HTML馬上,這是期望的。但是,這隻給了我空白的HTML沒有任何圖像或CSS嵌入。

我想要做的事情基本上與瀏覽器在單擊「Save Page as」菜單項時所做的一樣(可能甚至將zip圖像,css和html文件放在zip文件中並返回)。

什麼是正確的方法來做到這一點?有沒有辦法使用標題設置調用瀏覽器的「Save page as」對話框?

問候,

塞巴斯蒂安

回答

1

這是可能的工作程序......

  1. 組裝要下載的東西 - 渲染HTML,圖像,CSS等 - 到文件系統上的一個臨時目錄。

    • 爲dir指定一個絕對唯一的名稱(也許使用timestamp)。
    • 您可以將呈現的HTML文件放在目錄根目錄中,並將資源置於assets子目錄中。
    • 您需要修改HTML文件中的所有資產項URI以指向assets dir中的項目,而不是其通常的位置。例如:

      <img src='assets/my_img.jpg'>

  2. 郵編它分爲使用rubyzip寶石一個* .zip存檔。

  3. 使用Rails的send_file方法打開下載對話框。

    send_file '/path/to.zip'

  4. 刪除臨時目錄和zip壓縮文件。避免在用戶下載時刪除它。也許建立一個cron工作來每天清理一次。

+0

不同這正是我結束了在此期間:-)謝謝做無論如何! – Sebastian 2009-07-05 08:57:36

0

你可以嘗試設置的HTTP內容類型爲「application /八位字節流」,讓我知道是否有幫助?

+0

不,這並不做任何事情比「應用程序/ x-未知」 – Sebastian 2009-07-03 19:56:41

0

爲我工作:

send_data(render, :filename => "filename.ext")