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

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 に答える