Загрузка CSV завершается неудачно с Internet Explorer при первой попытке, работает при последующих попытках - PullRequest
1 голос
/ 08 октября 2010

это слишком долго меня отталкивало ..

Ниже приведен наш контроллер Rails 3.

  1. При попытке доступа через Internet Explorer в первый разприглашение на загрузку завершается неудачно с сообщением «Невозможно загрузить».

  2. При попытке сразу же перейти по тому же URL-адресу приглашение на загрузку работает успешно.

  3. В любом случае заголовок Cache-Control также не отправляется должным образом.Мы предоставляем конкретное значение для ответа стойки, но Cache-Control всегда возвращается как «Cache-Control: no-cache».Другие предоставленные значения заголовка отправляются правильно, хотя.Это может быть отдельный вопрос, но меня это все равно отталкивает.

Пример ниже демонстрирует, как наша система работает с данными клиента.CSV запускается и передается клиенту.Загрузка происходит постепенно, чтобы избежать длительного ожидания, пока генерация CSV завершена.Размер этих файлов может превышать 20-30 МБ, поэтому нежелательно ждать несколько минут перед началом загрузки.

Это работает во всех других браузерах (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 Ответ

2 голосов
/ 18 октября 2010

Эта проблема может быть связана с http://support.microsoft.com/kb/316431 - попробуйте опустить «must-validate» в заголовке «Cache-Control» и посмотреть, работает ли он. Если нет, попробуйте полностью опустить заголовок. Для части "no-cache", отправляемой вместе, возможно, запрос проходит через прокси, который добавляет это?

Sven

...