это слишком долго меня отталкивало ..
Ниже приведен наш контроллер Rails 3.
При попытке доступа через Internet Explorer в первый разприглашение на загрузку завершается неудачно с сообщением «Невозможно загрузить».
При попытке сразу же перейти по тому же URL-адресу приглашение на загрузку работает успешно.
В любом случае заголовок 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