Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CGI-如何在TCP服务器中获取上载的文件?_Python_Upload_Cgi_Multipart - Fatal编程技术网

Python CGI-如何在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

我把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)
        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我想知道的是,当有烧瓶或金字塔时,为什么要经历这些痛苦。谢谢!我没有回答你的问题,但出现了错误。。我写了完整的源代码,还有一个问题!你能再帮我一次吗?链接是