2010-10-08 102 views
1

,這已經把我扔了太久..CSV下載失敗,第一次嘗試的Internet Explorer,後續嘗試

下面發佈是我們的Rails 3控制器。

  1. 當第一次嘗試使用Internet Explorer進行訪問時,下載提示失敗並顯示「無法下載」消息。

  2. 當試圖立即訪問相同的URL時,下載提示符將成功工作。

  3. 在任何情況下,Cache-Control標頭也沒有正確發送。我們正在爲機架響應提供特定的值,但Cache-Control總是作爲「Cache-Control:no-cache」返回。提供的其他標題值正在正確發送。這可能是一個單獨的問題,但無論如何都要拋棄我。

下面的示例是我們的實際系統如何處理客戶端數據的一個模擬。 CSV已啓動並流式傳輸到客戶端。下載是漸進式的,以避免CSV生成完成後漫長的等待時間。這些文件可以超過20-30mb,因此在下載開始之前等待幾分鐘是不可取的。

這似乎適用於所有其他瀏覽器(firefox,safari等)。

class StreamingController < ApplicationController 

    def index 
    respond_to do |wants| 
     wants.csv { 
     filename = "testing_filename#{DateTime.now}.csv" 

     headers.merge!({ 
      'Cache-Control'    => 'must-revalidate, post-check=0, pre-check=0', 
      'Content-Type'    => 'text/csv', 
      'Content-Disposition'  => "attachment; filename=\"#{filename}\"", 
      'Content-Transfer-Encoding' => 'binary' 
     }) 

     responder = Rack::Response.new([], 200, headers) do |response| 
      response.finish do |r| 
      100000.times do |t| 
       r.write(t) 
      end 
      end 
     end 

     self.response_body = responder 
     } 
    end 
    end 
end 

回答

2

這個問題可能與http://support.microsoft.com/kb/316431 - 嘗試省略「必須驗證」在頭「的Cache-Control」,看看它是否工作。如果不嘗試完全省略標題。對於正在發送的「no-cache」部分,請求是否可能要通過代理來添加?

斯文

+0

您好,Rails 3中源花了一些時間後,我們來到了以下結論: 一)設置這種方式是不工作的頭,我們需要做的事情一樣標題[「的cache b)如果你的響應沒有正確地返回一個值,Rails 3會將Cache-Control設置爲默認值「no-cache」,如果你的響應沒有正確返回,字符串值。這可以是一個字符串數組,也可以是單個形成的字符串。 c)如果你以前在Rails 2.x中使用過程進行響應,而是將其更改爲生成過程的類,產生字符串並對每個和所有響應? – releod 2010-10-18 20:32:32

+0

只是爲了確認@shendriks的答案。我遇到了完全相同的問題,並且在嘗試從Excel或MS Word打開鏈接時發現相同的問題。通過徹底刪除Cache-Control標頭,問題解決了。 – 2013-12-10 20:18:08

相關問題