【问题标题】:How to request several arguments from FormData?如何从 FormData 请求多个参数?
【发布时间】:2018-10-03 18:26:30
【问题描述】:

这是来自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,

然后得到:

然后我可以轻松地使用

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。您的有效负载应包含myfilemyvalue。正如您在屏幕截图中看到的那样。 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


【解决方案1】:

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

当您使用multipart/form-data 时,您的有效负载应该是一个文件和一些form-data。但是在你的截图中,你可以看到,你添加了一个object

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2016-07-07
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多