📅  最后修改于: 2023-12-03 14:57:24.649000             🧑  作者: Mango
在web开发中,多部分表单数据通常用于上传文件和表单数据发送。Python提供了一种方式来解析这些数据。在python中,我们可以使用cgi
和cgitb
模块来解析多部分表单数据。下面是一个简单的例子,演示如何使用这些模块。
cgi
和cgitb
是Python的内置模块,无需安装。您可以直接在您的Python代码中使用它们。
import cgi, cgitb
我们先创建一个HTML表单,使得我们有一个用于处理的多部分表单数据样本。
<html>
<body>
<h2>上传文件和附加参数</h2>
<form enctype="multipart/form-data" action="upload.py" method="post">
<p>文件: <input type="file" name="file" /></p>
<p>名称: <input type="text" name="name" /></p>
<br />
<input type="submit" value="上传" />
</form>
</body>
</html>
要解析多部分表单数据,我们需要先创建FieldStorage
,然后使用该对象来访问表单数据。该对象将通过HTML表单中的enctype
属性来检测多部分数据并相应处理。
# 创建FieldStorage对象
form = cgi.FieldStorage()
# 获取文件名和文件内容
if form.getvalue('name'):
name = form.getvalue('name')
else:
name = '未知'
if 'file' in form:
fileitem = form['file']
# 检查文件是否上传
if fileitem.filename:
# 读取文件内容
filecontent = fileitem.file.read()
# 保存文件到制定路径
open('/tmp/' + fileitem.filename, 'wb').write(filecontent)
message = '文件已上传'
else:
message = '文件未上传'
else:
message = '文件未上传'
最后,我们将在HTML中向用户展示处理结果。
print('Content-type:text/html\r\n\r\n')
print('<html>')
print('<head>')
print('<title>文件上传演示</title>')
print('</head>')
print('<body>')
print('<p>{0}</p>'.format(message))
print('<ul>')
print('<li><strong>名字:</strong> {0}</li>'.format(name))
print('<li><strong>文件名:</strong> {0}</li>'.format(fileitem.filename))
print('<li><strong>文件内容:</strong></li>')
print('</ul>')
print('<pre>')
print(filecontent)
print('</pre>')
print('</body>')
print('</html>')
完整的Python脚本如下所示。
import cgi, cgitb
# 创建FieldStorage对象
form = cgi.FieldStorage()
# 获取文件名和文件内容
if form.getvalue('name'):
name = form.getvalue('name')
else:
name = '未知'
if 'file' in form:
fileitem = form['file']
# 检查文件是否上传
if fileitem.filename:
# 读取文件内容
filecontent = fileitem.file.read()
# 保存文件到制定路径
open('/tmp/' + fileitem.filename, 'wb').write(filecontent)
message = '文件已上传'
else:
message = '文件未上传'
else:
message = '文件未上传'
# 显示处理结果
print('Content-type:text/html\r\n\r\n')
print('<html>')
print('<head>')
print('<title>文件上传演示</title>')
print('</head>')
print('<body>')
print('<p>{0}</p>'.format(message))
print('<ul>')
print('<li><strong>名字:</strong> {0}</li>'.format(name))
print('<li><strong>文件名:</strong> {0}</li>'.format(fileitem.filename))
print('<li><strong>文件内容:</strong></li>')
print('</ul>')
print('<pre>')
print(filecontent)
print('</pre>')
print('</body>')
print('</html>')
这就是解码多部分表单数据 Python 的完整示范,通过这篇文章能让你在你的python开发工作中更加得心应手。