这是来自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的其他解决方案,但没有成功。
答案 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