Как запросить несколько аргументов из FormData? - PullRequest
0 голосов
/ 03 октября 2018

Это дополнительный вопрос от здесь : там я узнал, как загрузить файл, обработать его, а затем снова заполнить веб-сайт его содержимым, используя AJAX и FormData.Например, если у меня есть файл data.csv, например:

A,B,C
1,3,4
2,4,2

, я могу передать его, используя AJAX и FormData

<form method="POST" enctype="multipart/form-data" id="fileUploadForm">
    <div class="custom-file">
       <input id="myfile" name="myfile" type="file" class="custom-file-input">

       <label for="myfile" class="custom-file-label">
         Choose file...
       </label>
    </div>
</form>

// the javascript part
var form = $('#fileUploadForm')[0];
var formdata = new FormData(form);

$.ajax({
        type: "POST",
        enctype: 'multipart/form-data',
        url: "/_get_table",
        data: formdata,
        processData: false,
                contentType: false,
                cache: false,
                timeout: 600000,

и получить:

enter image description here

Затем я могу легко получить это с помощью

file = request.files['myfile']

и преобразовать его в кадр данных с помощью

df = pd.read_csv(file)

У меня сейчас вопрос как мне это сделать, если я хочу передать дополнительные параметры (не только файл). Здесь предлагается использовать

var formdata = new FormData();
formdata.append("myform", form)
formdata.append("myvalue", 10)

, что дает

enter image description here

и headers

enter image description here

Как мне теперь правильно собирать информацию? Я могу получить myvalue вот так

val = request.form['myvalue']

но я не нашел способа доступа и чтения myfile.Например, если я попробую

file = request.files['myform'] 

, я получу

werkzeug.exceptions.HTTPException.wrap..newcls: 400 Неправильный запрос: KeyError: 'myform'

Я также пробовал другие решения из здесь , но безуспешно.

1 Ответ

0 голосов
/ 05 октября 2018

Проблема в том, что вы не добавили свой файл в FormData правильно.

Поскольку вы используете multipart/form-data, ваша полезная нагрузка должна быть одним файлом и некоторыми form-data.Но на скриншоте, как вы видите, вы добавили один object.

. Чтобы решить эту проблему, на самом деле вы можете напрямую добавить свое значение к исходному FormData:

var formdata = new FormData(form); 
formdata.append("myvalue", 10);
...