rubyroogemexcel导入错误

我觉得有一件很简单的事情,我不认为这是错的。 下面是我上传文件的jQuery代码:

import: function (e) { e.preventDefault(); var formData = new FormData(); jQuery.each($('#import_excel_file')[0].files, function(i, file) { formData.append('import_file', file, 'xls'); }); formData.append('fuel_type_id', $('#import_fuel_type').val()); this.shipOff(formData); }, shipOff: function (formData) { $.ajax({ type: 'POST', url: App.Options.rootUrl + "/stations/stations/excel_import", data: formData, cache: false, contentType: false, processData: false, success: function (data) { console.log('successful upload', data); } }); } 

然后在控制器中,我调用import = Excel.new(xls_file.tempfile.to_path.to_s) ,我得到一个类似于错误TypeError (/var/folders/rd/58f3hjw10lv09q_8hsl0l7zn1mn1rf/T/RackMultipart20130909-36782-r1bv5n is not an Excel file)

我在这里错过了什么?

您可以忽略文件扩展名检查,忽略file_warning( https://github.com/Empact/roo/issues/67

 Roo::Excel.new(file.path, file_warning: :ignore) 

我也build议将这个逻辑从您的控制器中移出到一个导入器类中。

我发现这个答案似乎有伎俩。 以下是我的控制器现在的样子:

 def excel_import tmp = params['import_file'].tempfile tmp_file = File.join("public", params['import_file'].original_filename) FileUtils.cp tmp.path, tmp_file import = Excel.new(tmp_file) # do what I need with the tmp_file here... FileUtils.rm tmp_file # a response to let ajax know it worked. render :json => 'true' end 

如果有人有更好的答案,那么“roo的方式”请钟意!