首页 > 解决方案 > 烧瓶 request.get.args - 缺少一个 arg

问题描述

我正在从我的网站发送一个带有一些 FormData 的 POST 请求:

  var formData = new FormData();
  formData.append('file',file);
  formData.append('timestamp', window.performance.now())
  console.log(formData)
  console.log(window.performance.now())
  var xhr = new XMLHttpRequest();
  xhr.addEventListener("load", () => {
    console.log("asdf");
  });
  xhr.open("POST", "http://flaskmin.run.aws-usw02-pr.ice.predix.io/receivedoc");
  xhr.send(formData);

file实际的 Excel 文件在哪里。

我正在使用 Flask 服务器处理它:

@app.route('/receivedoc', methods=['POST', 'GET', 'OPTIONS'])
@crossdomain(origin='*')
def upload_file():
    if request.method == 'POST':
        print(request.files)
        print("Timestamp" + request.args.get('timestamp'))
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        #Do stuff with the file

奇怪的是,服务器确实收到了文件,但没有收到时间戳。当我尝试打印它时,我得到了错误TypeError: must be str, not NoneType。当我console.log(window.performance.now())在网站上做时,我确实在 Chrome 开发工具控制台上看到了时间,但它不会到达 Flask 服务器,停留在None. 我错过了什么?我也试过formData.append('timestamp', String(window.performance.now()))了,没用。

更新

所以我添加了一些日志记录,并且发生了一些奇怪的事情。我正在做:

   fileUpload: function(file) {
      console.log("fileUpload function called")      
      var formData = new FormData();
      formData.append('file',file);
      formData.append('t_stamp123', 'test123')
      console.log(formData)
      console.log(formData.files)
      console.log(formData.file)
      console.log(file)
      var xhr = new XMLHttpRequest();
      xhr.open("POST", "http://localhost:7733/receivedoc");
      xhr.send(formData);
      var xhr1 = new XMLHttpRequest();

这通过以下方式调用:

  self.fileUpload(uploadComponentId.files[0])

并且uploadComponentId是一种<form>元素。所以奇怪的是我在这个节目中的控制台:

fileUpload function called
pacing-view.html:60 FormData {}
pacing-view.html:61 undefined
pacing-view.html:62 undefined
pacing-view.html:63 File(114688) {name: "GL_Details_03212018_094512.xls", lastModified: 1521640039000, lastModifiedDate: Wed Mar 21 2018 14:47:19 GMT+0100 (CET), webkitRelativePath: "", size: 114688, …}

然而,服务器确实得到了文件,我可以将它写入磁盘(我现在在 localhost 上运行所有东西)!!!即使formData看起来是空的,文件也会到达服务器,但时间戳不会?哇。

更新 2

当我删除该formData.append('file',file);行时,文件确实被发送到服务器,并且我得到一个UnboundLocalError: local variable 'filename' referenced before assignment. 所以我绝对不会在代码中的其他地方发送文件,它必须与formData.

标签: javascriptpythonnode.js

解决方案


好的,结果FormData是 arequest可以被 访问request.form['timestamp'],它不是存储为arg.


推荐阅读