Экспортировать файл .csv во флакон с помощью ajax

Я пытаюсь загрузить файл csv со страницы и отправить его на бэкэнд, сделанный из python и flask, все работает нормально, зная, что, поскольку бэкэнд возвращает:

127.0.0.1 - - [15/Apr/2018 15:37:07] "GET /medal HTTP/1.1" 200

но ничего в ПОЧТЕ. Пробовал почти все, но без подключений или сообщений.

ОБРАТНАЯ СВЯЗЬ:

import pandas
  from calest import calest_app, client
from flask import request, jsonify
from..models.Medals import Medal

db = client.estadisticas
collection = db.medallas


@calest_app.route('/result', methods = ["POST"])
def post_discipline():
csv_received = request.files['file']
csv_file = pandas.read_csv(csv_received)
discipline_result = Medal(csv_file).get_medals_discipline()
gender_result = Medal(csv_file).get_medals_gender()
city_result = Medal(csv_file).get_medals_city()
country_result = Medal(csv_file).get_medals_country()
medals_result = Medal(csv_file).get_medals_by_medals()
sport_result = Medal(csv_file).get_medals_by_sport()
cursor = collection.insert({
  "discipline": discipline_result,
  "gender": gender_result,
  "city": city_result,
  "country": country_result,
  "medal": medals_result,
  "sport": sport_result
})
return jsonify("Added"), 201

ФРОНТЕНД AJAX:

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" > </script>

  < script >
  $("#form").on("submit", function (e) {

    var fileSelect = $("#csvFile");
    var files = fileSelect[0].files;
    // Create a new FormData object.
    var formData = new FormData();

    debugger;
    formData.append("#csvFile", files[0].name, files[0], files[0].name);
    <!--csv_received = request.-- >

      $.ajax({
        url: "http://localhost:5000/result",
        method: "POST",
        data: formData,
        contentType: false,          // The content type used when sending data to the server.  
        cache: false,                // To unable request pages to be cached  
        processData: false,          // To send DOMDocument or non processed data file it is set to false  
        success: function (data) {
          debugger;
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
          debugger;
        }
      })
  });

</script>

Консоль браузера дает какие-либо подсказки или ошибки? Я почти уверен, что проблема в js, потому что вы вообще ничего не получаете на стороне сервера.

Joost 15.04.2018 23:59

Нет, я не получаю ничего в бэкэнд-консоли, как это происходит со всеми GET, просто не хочет работать с POST,

Ivonne Aspilcueta 16.04.2018 00:16

Я имел в виду консоль браузера. Вы можете ввести его на любой веб-странице, щелкнув правой кнопкой мыши практически в любом месте и выбрав «Проверить» (элемент), а затем перейти на вкладку консоли.

Joost 16.04.2018 00:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
734
1

Ответы 1

formData.append принимает не более 3 параметров, вы передаете 4.
. Первый параметр - это имя поля (а не селектор идентификаторов, как у вас) .
Во-вторых, это данные File / Blob / string (где вы указываете имя файла). Третье поле - это имя файла, которое действительно необходимо только при передаче Blob.
Поскольку вы используете file в качестве имени поля в коде сервера, используйте его в качестве первого параметра.

formData.append("file", files[0]);

Также следует упомянуть, что вам нужно предотвратить действие формы по умолчанию, если вы используете Ajax. Поэтому вам нужно поместить e.preventDefault(); в начало вашей функции обработчика отправки.

Musa 16.04.2018 00:35

Другие вопросы по теме