2016-08-29 35 views
0

我想發送由rubyXL gem創建的xlsx文件到前端,即AngularJS。當我將工作表保存在一個流中並通過send_data方法發送它時,我得到了這些數據,但我無法打開創建的文檔,因爲它已損壞。發送xlsx文件到前端 - AngularJS

workbook = RubyXL::Workbook.new 
worksheet = workbook[0] 
worksheet.sheet_name = 'Average of Team' 
worksheet.add_cell(0, 0, 'A1') 
buffer = workbook.sream 
send_data buffer 

我可以將數據保存到磁盤。但我無法將它發送給客戶端。所以,我可以從angularjs訪問數據。

workbook = RubyXL::Workbook.new 
worksheet = workbook[0] 
worksheet.sheet_name = 'Average of Team' 
worksheet.add_cell(0, 0, 'A1') 
path = "#{Rails.root}/tmp/#{Time.now.strftime('%Y%m%d%H%M%S%L')}.xlsx" 
workbook.write(path) 
send_file path 

我不想將工作簿保存在雲上併發送鏈接到客戶端。我的問題的最佳解決方案是什麼?我在哪裏犯錯?

UPD: 看來,當我試圖發送保存的文件,我發送完成前刪除文件。

UPD: 當我發送數據時,我遇到了編碼數據的問題。我試圖用string.bytes.to_a.pack("C*"),string.force_encoding('binary')。但它沒有幫助我。

回答

0

我認爲問題是ruby和js庫之間存在不兼容問題。一種可能的解決方案是在後端運行前端庫,以便處理具有相同庫的文件。這是可能的使用V8 js引擎https://github.com/cowboyd/therubyracer

但我不是100%確定我的解決方案是獨特的,最好的:)我有類似的問題,我已經用這種方式解決了。