Python CGI-如何在TCP服务器中获取上载的文件?
我把TCP服务器做成这样Python CGI-如何在TCP服务器中获取上载的文件?,python,upload,cgi,multipart,Python,Upload,Cgi,Multipart,我把TCP服务器做成这样 serverPort = 8181 serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.bind(('', serverPort)) serverSocket.listen(5) elif path == '/login': header, query = message.split(b'\r\n\r\n') fp = io.BytesIO(query) fo
serverPort = 8181
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(5)
elif path == '/login':
header, query = message.split(b'\r\n\r\n')
fp = io.BytesIO(query)
form = cgi.FieldStorage(fp, environ={'REQUEST_METHOD':'POST'})
connectionSocket.send(b'HTTP/1.1 200 OK\r\n')
connectionSocket.send(b'Content-type: text/html\r\n\r\n')
connectionSocket.send('<p>Hello {}!</p>'.format(form.getvalue('id')).encode('utf-8'))
我可以像这样接收用户的登录数据
serverPort = 8181
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(5)
elif path == '/login':
header, query = message.split(b'\r\n\r\n')
fp = io.BytesIO(query)
form = cgi.FieldStorage(fp, environ={'REQUEST_METHOD':'POST'})
connectionSocket.send(b'HTTP/1.1 200 OK\r\n')
connectionSocket.send(b'Content-type: text/html\r\n\r\n')
connectionSocket.send('<p>Hello {}!</p>'.format(form.getvalue('id')).encode('utf-8'))
elif path=='/login':
标头,query=message.split(b'\r\n\r\n')
fp=io.BytesIO(查询)
form=cgi.FieldStorage(fp,environ={'REQUEST_METHOD':'POST'})
connectionSocket.send(b'HTTP/1.1 200正常\r\n')
connectionSocket.send(b'Content-type:text/html\r\n\r\n')
connectionSocket.send('Hello{}!'.format(form.getvalue('id')).encode('utf-8'))
但我无法接收多部分上传数据!!T^T
我为上传文件编写了HTML
<HTML>
<BODY>
<FORM ENCTYPE="multipart/form-data" ACTION="http://127.0.0.1:8181/upload" METHOD=POST>
File to process: <INPUT NAME="file" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
</BODY>
</HTML>
要处理的文件:
如何接收文件并保存
我知道使用HTTP服务器是解决这个问题的好方法
但是我应该像那样使用TCP服务器
请帮帮我!我无法解决这个问题…T^T文件上载使用不同的内容类型;通常,POST使用
应用程序/x-www-form-urlencoded
,但文件上载要求表单使用多部分/表单数据
cgi.FieldStorage
类通常会从cgi环境变量中嗅探到这一点,但这里不使用cgi,而是在最低级别解析所有内容。您必须在此处传入CONTENT\u TYPE
标题:
form = cgi.FieldStorage(fp, environ={
'REQUEST_METHOD':'POST', 'CONTENT_TYPE': 'multipart/form-data'})
理想情况下,该标题当然是从传入的标题中解析出来的。read to docs to cgi。FieldStorages我想知道的是,当有烧瓶或金字塔时,为什么要经历这些痛苦。谢谢!我没有回答你的问题,但出现了错误。。我写了完整的源代码,还有一个问题!你能再帮我一次吗?链接是