python - 如何在 Flask 中接受通过 ajax 发送的 FormData?

标签 python ajax flask

我正在尝试使用 Ajax POST 请求在 FormData 中发送图像文件。 我面临两个问题:

  1. 我不知道如何提取 flask 部分的 FormData
  2. 发出 ajax POST 请求时出现 500 内部服务器错误(不确定这是不是因为 1)

谢谢

flask python代码:

@app.route('/', methods=['GET','POST'])
def upload_file():
if request.method == 'POST':
    file = request.files['file']
    if file: # and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(os.getcwd()+"/static", "current_image.jpg"))
        return jsonify({'tasks': tasks})

HTML 和 Javascript 代码:

<input id="pictureInput" type=file name=file>
<input type=submit value=Upload id="button">

<script type="text/javascript">
var pictureInput = document.getElementById("pictureInput");
var myFormData = new FormData();
myFormData.append('pictureFile', pictureInput.files[0]);

$("#button").click(function(){
    console.log(pictureInput);
    console.log(pictureInput.files[0]);
    console.log(myFormData);

    $.ajax({
      url: "http://localhost:8000/",
      type: 'POST',
      processData: false, // important
      contentType: false, // important
      dataType : 'json',
      data: myFormData,
      success : function(data){
            console.log(data);
      },
    });
});
</script>

错误: enter image description here

最佳答案

以下代码应该适合您。 您需要将 static 文件夹与您的 app.py 文件放在同一级别

app.py

import os
from flask import Flask, request, jsonify
from werkzeug.utils import secure_filename

app = Flask(__name__)


@app.route('/', methods=['GET','POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file:
            filename = secure_filename(file.filename)
            file.save(os.path.join(os.getcwd()+"/static", "current_image.jpg"))
            tasks = []
            return jsonify({'tasks': tasks})


if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

tasks 上面没有在你的代码中定义,所以我只是将它初始化为一个空列表。您还需要确保在您的模板中加载了 jQuery。

关于python - 如何在 Flask 中接受通过 ajax 发送的 FormData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091718/

相关文章:

python2 TypeError : must be unicode, 不是 io 模块的 str

python - 基于另一个列值创建列,基于将值分配给输入列中的字符串值集

javascript - 为什么我的 WebSocket 使用 Flask 自动关闭?

python - Flask:如何使用 jsonify 更改状态码以返回响应?

python - 为什么这个迭代的列表增长代码会给出 IndexError : list assignment index out of range? 如何将元素重复添加(附加)到列表中?

python - 使用 LU 分解求逆矩阵

php - 如何对使用ajax添加的表进行排序

javascript - AJAX 请求无法被 PHP 脚本识别为 POST

javascript - 为什么这个 JS var 在 AJAX 之后就失去了值(value)?

facebook - 阻止 Facebook/其他应用程序通过私有(private)共享链接抓取我的 Web 应用程序