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的方式”请钟意!