【发布时间】:2018-10-03 18:26:30
【问题描述】:
这是来自here 的后续问题:在那里我学会了如何上传文件、处理文件,然后使用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,
然后得到:
然后我可以轻松地使用
file = request.files['myfile']
并使用
将其转换为数据框df = pd.read_csv(file)
我现在的问题是如果我想传递其他参数(不仅仅是文件),我该怎么做。 Here建议使用
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 错误 请求:KeyError:'myform'
我还尝试了here 的其他解决方案,但没有成功。
【问题讨论】:
-
请向我们展示您的整个请求,包括标题。顺便说一句,它看起来不正确,因为您不应该将
form放入您的formdata,而只能放入myfile。您的有效负载应包含myfile和myvalue。正如您在屏幕截图中看到的那样。myform显然不是一个文件,而是一个 javascript 对象。这是没有意义的。 -
@Sraw:是的,但我不知道如何正确传递;我不知道如何只提取文件。我也试过
form.elements.myfile,但这也无济于事。给我一点时间来制作屏幕截图... -
@Sraw;我添加了标题的屏幕截图。这有帮助吗?
-
是的,它确实有帮助。所以你的格式是正确的。唯一的问题是如何在 javascript 中正确传递文件。在这种情况下,这不是 python 问题。我猜你可以直接
var formdata = new FormData(form); formdata.append("myvalue", 10)。 -
@Sraw:这似乎行得通!随意添加它作为答案。然后我会打开另一个问题来真正理解这种行为......
标签: python ajax flask request form-data