Прямая загрузка файла xls без записи его в каталог с помощью Gem Spreadsheet - PullRequest
23 голосов
/ 29 октября 2010

Я использую эту таблицу для экспорта файла xls.

В моем контроллере есть следующие коды:

def export
  @data = Data.all

  book = Spreadsheet::Workbook.new
  sheet = book.create_worksheet :name => "data"

  contruct_body(sheet, @data)

  book.write "data.xls"
end

Таким образом, я могу заполнить данные и сохранить их в корневом каталоге.

Но я хочу скачать его, а не сохранять. Как я могу изменить код так, чтобы пользователю предлагалось выбрать свой локальный каталог для сохранения файла? (лучше, если без сохранения копии на стороне сервера)

Пожалуйста, помогите!

Ответы [ 3 ]

50 голосов
/ 02 ноября 2010

Вы можете отправить его в браузер без сохранения его как локального файла, как указано ниже

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

Вы можете попробовать этот код

book.write "data.xls"

send_file "/path/to/data.xls", :type => "application/vnd.ms-excel", :filename => "data.xls", :stream => false

# and then delete the file

File.delete("path/to/data.xls")

Передача :stream => false в send_file заставит Rails скопировать весь файл в память перед потоковой передачей, поэтому использование File.delete сразу после send_file будет в порядке, так как send_file немедленно возвращается без ожидания завершения загрузки , Сказав это, с очень большими файлами вы можете увидеть некоторые «горлышки» в зависимости от объема доступной памяти.

НТН

0 голосов
/ 26 июля 2013

Дело случилось на моем теле. Я использовал ajax-запрос remote :: true для экспорта файла Excel, в браузере ничего не отображалось без каких-либо сообщений об ошибках на консоли. Удалите удаленные параметры из формы, все работает хорошо.

...