如何使用AJAX异步上传同一请求中的文件和其他数据到Flask服务器?

时间:2015-08-21 12:22:38

标签: jquery ajax flask

给出here的解决方案有助于异步上传文件。

当我更改它以包含文件和一些字符串数据时,我无法访问字符串和文件。

这是我到目前为止所做的:

@app.route('/upload', methods=['POST'])
def upload_file():
    path = request.form.get('path')
    print("PATH: ", path)
    path = path or 'test_folder_2/' # Fallback
    if request.method == 'POST':
        files = request.files.getlist('files')
        print("FILES: ", files)
        filenames = [_ for _ in os.listdir(os.path.join('.', 'content', path ))]
        for file in files:
            if file and helpers.is_allowed_file(file.filename):
                filename = helpers.get_name(file.filename, filenames)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], path, filename))
    return 'Done'

这是我在服务器上的观点:

<system.diagnostics>
  <trace>
    <listeners>
      <clear/>
    <listeners>
  </trace>
</system.diagnostics>

这个的输出是:
路径:无 文件:[]

我尝试使用JSON.stringify()来发送数据,但这样做的文件似乎没有到达服务器。

FWIW这就是我要做的事情:从客户端接收一堆文件并将其存储在“路径”指定的文件中。

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题:

  1. 只需append额外的键和值:

    form_data.append("path", "test_folder_2/")
    

    然后发送数据:

    data: form_data
    
  2. 使用路径向表单添加隐藏字段,FormData将为您执行此操作:

    <input type="hidden" name="path" value="test_folder_2/">