Подтвердить что ты не робот

Прямая загрузка файла xls без записи в каталог с помощью таблицы электронных таблиц

Я использую этот Spreadsheet gem для экспорта файла 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

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

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

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

4b9b3361

Ответ 1

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

spreadsheet = StringIO.new 
book.write spreadsheet 
send_data spreadsheet.string, :filename => "yourfile.xls", :type =>  "application/vnd.ms-excel"

Ответ 2

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

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 возвращается немедленно, не дожидаясь завершения загрузки, Сказав, что с очень большими файлами вы можете увидеть некоторые шейки памяти в зависимости от объема доступной памяти.

НТН

Ответ 3

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