1

我认为有一些非常简单的事情我看不到这里是错误的。这是我上传文件的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)

我在这里想念什么?

4

2 回答 2

2

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

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

我还建议将此逻辑从控制器中移出到导入器类中。

于 2014-05-08T20:52:15.047 回答
0

我发现这个答案似乎可以解决问题。这是我的控制器现在的样子:

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 way”,请加入!

于 2013-09-09T17:35:57.800 回答