javascript - 烧瓶 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
.
解决方案
好的,结果FormData
是 arequest
可以被 访问request.form['timestamp']
,它不是存储为arg
.
推荐阅读
- heroku - 带有 GoDaddy 域的 Heroku 无法正常工作
- java - Java Parse Json Array in another Json Array json.simple
- javascript - 如何使用 Angular 中连接的所有字段访问嵌套 JSON 中的值?
- python-3.x - 从 __init__.py 中访问 import 语句(或在导入子模块时如何不运行 __init__.py)
- javascript - vuetify 数据表计算属性到 sql
- symfony - Symfony 无法显示浮点数
- java - 从 ObservableList 中提取元素
- python - 尝试使用 CV2 和 numpy 调整图像的大小和形状
- reactjs - 开玩笑的不一致快照
- javascript - 为什么我们在 Js 中需要回调函数 为什么我们不简单地在 Main 函数中调用函数?