我创建了这个html:
app.module
所以我正在尝试从前端到后端上传数据。在后端,我正在使用此代码:
<!DOCTYPE html>
<html lang="en" xmlns:https="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Upload Test</title>
</head>
<body>
<form action="http://localhost:8887/upload/" method="post">
<label class="btn btn-default btn-file">Browse
<input type="file" class="hidden"/>
</label>
<br>
<input class="btn btn-default" type="submit">
</form>
</body>
</html>
行from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/upload/', methods=['POST', 'GET'])
def upload():
print(request.files)
return 'hey'
if __name__ == '__main__':
app.run('0.0.0.0', 8887)
的结果始终为
print(request.files)
我无法理解我的错误在哪里?
答案 0 :(得分:1)
我本身没有flask
开发人员,但正如@Craicerjack已经说过的那样,您需要进行表单上传:
- 标记标有
enctype=multipart/form-data
,<input type=file>
以该格式排列。- 应用程序从请求对象上的文件字典中访问该文件。
- 使用文件的save()方法将文件永久保存在文件系统的某个位置。
醇>
multipart/form-data
会产生很大的不同,因为显式表示:
请求中会有不同的mime类型。
您的表单数据不应编码(如果内存提供其他值application/x-www-form-urlencoded
和text/plain
)。
为什么multipar/form-data
?所以客户端(a.k.a浏览器)发送看起来像这样的多部分请求
MIME-Version: 1.0
Content-Type: multipart/form-data;
boundary="----=_NextPart_000_0004_01D270B5.6F278C60"
my_post_variable = value
------=_NextPart_000_0004_01D270B5.6F278C60
Content-Type: octet-stream
3434352345345341223423
,上传的文件位于------=_NextPart_000_0004_01D270B5.6F278C60
。
现在,在完成所有解释之后,您应该将enctype=multipart/form-data
添加到表单中,然后从路线中删除GET
方法,这样就可以上传。