Нулевые байты отправлены при отправке сгенерированного файла Axlsx Gem - PullRequest
0 голосов
/ 05 декабря 2018

При попытке отобразить окно загрузки и потоковую передачу файла XLSX с использованием Ruby Sinatra и гема AXLSX мой файл Excel сериализуется успешно в локальный файл, поэтому я знаю, что это действительный документ Excel, но он мне нужен для передачи содержимого до концапользователь.В сети не было никаких документов с примерами использования AXLS и Sinatra вместе, только рельсы.Помощь приветствуется!

class Downloads < Sinatra::Base
  get '/downloads/report' do
    ## ...
    Axlsx::Package.new do |p|
      p.workbook.add_worksheet(name: 'tab name') do |sheet|
        ## ...
      end
      content_type 'application/xlsx'
      attachment 'cost-code-dashboard.xlsx'
      p.to_stream # unsuccessful
      # p.to_stream.read # unsuccessful as well
    end
  end
end

Я также безуспешно попробовал следующий фрагмент

Axlsx::Package.new do |p|
  ## ...
  send_file p.to_stream.read, type: "application/xlsx", filename: "cost-code-dashboard.xlsx"
end

1 Ответ

0 голосов
/ 05 декабря 2018

Похоже, что проблема была связана с тем, как был вызван Axlsx::Package.new, вспомогательные функции не были доступны в Axlsx, сработало следующее решение - онлайн-документация гласила, что приведенный ниже content_type лучше

get '/downloads' do
  content_type :'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

  p = Axlsx::Package.new
  p.workbook.add_worksheet(name: 'Test') do |sheet|
    sheet.add_row ['Hello world']
  end
  p.to_stream
end
...