Как сделать файл «загруженным» при нажатии в Windows IE - PullRequest
2 голосов
/ 09 февраля 2011

У меня есть кнопка в теге формы, которая генерирует файл CSV и запрашивает загрузку, когда пользователь щелкает по нему.

Когда я пытаюсь сделать это в IE, IE пытается открыть файл с помощью IE, которыйэто не должноЯ просто хочу скачать файл.

Мой HTML:

<FORM accept-charset="UTF-8" method="post" action="/generate_csv?calc[]total_interest=189.08">
  <DIV style="margin: 0px; padding: 0px; display: inline;"><INPUT name="utf8" value="✓" type="hidden">
    <INPUT name="authenticity_token" value="4o1dEDoFbbDoc3scpnhDaQpPtpFM5NitTOrYQA0AU5k=" type="hidden">
  </DIV>
  <INPUT id="print_csv" name="commit" value="Print CSV" type="submit">
</FORM>

My Rails Controller:

headers['Content-Disposition'] = "attachment;"
send_data(csv_string,
  :type => 'text/csv; charset=utf-8; header=present; disposition=attachment',
  :filename => @filename,
  :disposition => 'attachment')

Есть идеи, как этого добиться?

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Программа, генерирующая CSV, должна добавить HTTP-заголовок для Content-Disposition:

 Content-Disposition: attachment; filename=<file name.ext>

См. http://www.jtricks.com/bits/content_disposition.html.

1 голос
/ 09 февраля 2011

Я бы попробовал следующее.В вашем контроллере, когда вы генерируете CSV-файл, вы, вероятно, отправляете его, используя send_data или send_file.Это верно?Если это так, вам, вероятно, нужно установить расположение как «вложение», а не просто отправлять файл или данные.Например:

send_data @csv, :type => 'text/csv', :disposition => 'attachment', :filename => 'generate_csv.csv'

или

send_file '/path/to.csv', :type => 'text/csv', :disposition => 'attachment'

Еще одна вещь, которую вы можете сделать, это изменить ваши маршруты, чтобы включить формат.Например:

match 'generate_csv.csv' => 'csv#generate_csv'

Вы можете преобразовать свой почтовый запрос в запрос на получение, подобный этому:

<%= link_to "Print CSV", '/generate_csv?calc[]total_interest=189.08' %>
0 голосов
/ 09 февраля 2011

Чтобы указать браузеру, что он должен загрузить файл, обязательно отправьте заголовок Content-Disposition: attachment из приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...