如何从 FormData 请求多个参数?

How to request several arguments from FormData?

这是 的后续问题:我在那里学习了如何上传文件、处理文件,然后使用 AJAXFormData.例如,如果我有一个这样的文件 data.csv

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

我可以使用 AJAXFormData

传递它
<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,

并得到:

然后我可以使用

轻松获取它
file = request.files['myfile']

并使用

将其转换为数据框
df = pd.read_csv(file)

我现在的问题是如果我想传递额外的参数(不仅是文件),我会怎么做。 建议使用

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

这给出了

headers

我现在如何正确收集信息?我可以这样得到myvalue

val = request.form['myvalue']

但我还没有找到访问和阅读 myfile 的方法。如果我例如尝试

file = request.files['myform'] 

我明白了

werkzeug.exceptions.HTTPException.wrap..newcls: 400 Bad Request: KeyError: 'myform'

我也尝试了 here 的其他解决方案,但没有成功。

问题是因为您没有将文件正确添加到 FormData

当您使用 multipart/form-data 时,您的负载应该是一个文件和一些 form-data。但是在您的屏幕截图中,如您所见,您添加了一个 object.

要解决这个问题,其实你可以直接把你的值加到原来的FormData:

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