首次尝试使用Internet Explorer时CSV下载失败,适用于后续尝试

时间:2010-10-08 14:39:10

标签: ruby-on-rails internet-explorer csv cache-control

这让我失去了太久......

以下是我们的Rails 3控制器。

  1. 第一次尝试使用Internet Explorer访问时,下载提示失败并显示“无法下载”消息。

  2. 当尝试紧接着访问同一个URL时,下载提示会成功运行。

  3. 在任何情况下,Cache-Control标头也未正确发送。我们为Rack Response提供了一个特定值,但Cache-Control始终作为“Cache-Control:no-cache”返回。提供的其他标头值正在正确发送。这可能是一个单独的问题,但无论如何都会让我失望。

  4. 以下示例模拟了我们的实际系统如何使用客户端数据。启动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
    

1 个答案:

答案 0 :(得分:2)

此问题可能与http://support.microsoft.com/kb/316431有关 - 尝试在标题“Cache-Control”中省略“must-validate”,看看它是否有效。如果没有尝试完全省略标题。对于正在发送的“无缓存”部分,请求是否可能通过添加此命令的代理?

斯文