Javascript Flask request.get.args-缺少一个arg
我正在从我的网站发送一个帖子请求,其中包含一些表单数据:Javascript Flask request.get.args-缺少一个arg,javascript,python,node.js,Javascript,Python,Node.js,我正在从我的网站发送一个帖子请求,其中包含一些表单数据: 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();
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);
其中文件
是实际的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:必须是str,而不是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
是一种
元素。奇怪的是,我的主控台上有这样的节目:
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, …}
然而,服务器确实获得了文件,我可以将其写入磁盘(我现在正在本地主机上运行所有操作)!!!即使formData
看起来是空的,文件还是可以传递到服务器,但是时间戳没有?哇
更新2
当我删除
formData.append('file',file)时代码>行,文件不会被发送到服务器,我会得到一个UnboundLocalError:赋值前引用的局部变量'filename'。
。因此,我肯定不会将文件发送到代码中的其他地方,它必须使用formData
确定,因此请求中的formData
可以通过请求访问。form['timestamp']
,它不会存储为arg
,可能是一个特殊的字段名。你能试着把它命名为tstamp
然后再试一次吗?如果你不能在timestamp
字段下发送一个常规的string
,那么除了这个我就想不出别的了。我在两个地方都将它重命名为t\u stamp123
,不起作用:/你能试着发送'timestamp':'test123'并让我知道它是如何进行的吗?我会在几秒钟后更新这个问题,这很疯狂,但是为什么你不能将console.log formdata字段记录到console中?当你在js端使用console.log(formdata.timestamp)时,你能正确地看到它吗?不。。。不知道为什么我不能将其写入控制台。。。看起来完全是空的。如果你能成功地在烧瓶上获得时间戳,那就意味着你可以控制台。用错误的方式记录。是的,我想,但我不介意说实话。。。服务器获取信息的主要内容:D