Flask 将文件上传到不带表单的烧瓶

时间:2021-04-07 18:11:41

标签: javascript python html python-3.x flask

我希望能够在不使用典型的 HTML 表单的情况下从 javascript 上传我的文件,以便在将文件上传到 python 时不必刷新页面。

我没有成功地使用 request.files 获取我的文件。 我尝试了两种不同的版本,一种使用 HTML 表单,一种不使用。

当尝试使用 HTML 表单时,request.files 的输出是一个 ImmutableMultiDict,看起来像这个 ImmutableMultiDict([('file', <FileStorage: '^RUT.csv' ('text/csv')>)]) 而根据我的理解,它应该是一个字典。
代码如下:

<form method="POST" action="/get_dims" enctype="multipart/form-data" id="import_form">
                <input type="file" name="file" accept=".csv" id="training_set_import" value="import training set"/>
                <input type="submit" value="Submit">
</form>
@app.route("/get_dims", methods=["POST"])
def getDatasetDims():
    file_n = request.files
    print("Got it!")
    print(file_n)
    return "None"

我尝试过的另一种更可取的方法是使用 AJAX 使用 javascript。执行此操作时,request.files 会返回一个空的 ImmutableMultiDict,类似于 ImmutableMultiDict([])。这是我的代码:

$(function(){
    $("#training_set_import").change(function(){
      var file_name = $("#training_set_import").val();
      var form = $("#training_set_import").form;
      var data = new FormData(form);
      if (file_name !== ""){
        $.ajax({
          type: "POST",
          url:"/get_dims",
          enctype: "multipart/form-data",
          data: {"file": data},
          cache: false,
          processData: false,
          contentType: false
        });
      }
    });
});

python代码是一样的。

所以我的问题是,我怎样才能实现这个的 javascript 版本,以便我可以在 python 中操作上传的 csv?

1 个答案:

答案 0 :(得分:0)

好的,我在这里找到了一个解决我问题的线程。这是:How to upload a file using an ajax call in flask 希望这能帮助任何和我有同样问题的人!