Невозможно отправить файл в ruby ​​на рельсах с формой данных - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть этот код в моем приложении реагирования:

this.handlefileupload = (e) => {



console.log(e.target.files[0])
 var formdata = new FormData()



      formdata.append('file', e.target.files[0])



      axios.post('http://localhost:3000/api/v1/upload_document', {
        myfile: formdata
      }, {
          headers: {
            Authorization: "Bearer " + sessionStorage.getItem('loginToken'),
            'Content-Type': 'multipart/form-data'
          }
        }
      )
        .then((response) => {
          console.log('success')

        }

        )
        .catch(function (error) {
          console.log(error.response);
        });
    }

И в моем приложении Ruby on Rails есть следующее:

def upload
   uploaded_io = params[:myfile][:file]
   File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
     file.write(uploaded_io.read)
   end
end

Я получаю следующую ошибку:

Выполнено 500 Внутренняя ошибка сервера в 6 мс (ActiveRecord: 1,0 мс)

NoMethodError (неопределенный метод `[] 'для nil: NilClass):

Скорее всего, потому что он не получает файл?

1 Ответ

0 голосов
/ 14 декабря 2018

Ваши параметры в бэкэнде params[:files][:file]

Но вы отправляете его из реакции как params[:file]

Измените код реакции на formdata.append('files[file]', e.target.files[0])

Также убедитесь, что URL действителен!

const formData = new FormData();
const headers = {
  'Authorization': "Bearer " + sessionStorage.getItem('loginToken'),
  'Accept': 'application/json',
  'Content-Type': 'multipart/form-data'
}

formdata.append('files[file]', e.target.files[0])
axios.post("http://localhost:3000/api/v1/upload_document", formData, {headers})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...