如何从FormData请求几个参数?

时间:2018-10-03 18:26:30

标签: python ajax flask request form-data

这是来自here的后续问题:我在那里学习了如何上传文件,进行处理,然后使用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,

并获得:

enter image description here

然后我可以轻松地使用

file = request.files['myfile']

并使用

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

我的问题是,如果我想传递其他参数(不仅是文件),该怎么做。 Here建议使用

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'

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

1 个答案:

答案 0 :(得分:1)

问题是因为您没有将文件正确添加到for i in range(3): axes[i].plot(x, y, label='File %d' %i) axes[i].legend()

在使用fig, axes = plt.subplots(nrows=3, ncols=1) x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) for i, ax in enumerate(axes.ravel()): # or axes.flatten() or axes.flat ax.plot(x, y, label='File %d' %i) ax.legend() fig.text(0.5, 0.01, 'X-label', ha='center') fig.text(0.01, 0.5, 'Y-label', va='center', rotation='vertical') plt.tight_layout() # To get a better spacing between the subplots 时,您的有效载荷应该是一个文件,而有些FormData。但是,如您所见,在屏幕截图中,您正在添加一个multipart/form-data

要解决此问题,实际上您可以将您的值直接添加到原始form-data

object