2014-05-18 52 views
0

我做了TCP服務器這樣Python CGI - 如何在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')) 

用戶的登錄數據,但我不能接收多上傳數據!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> 

我該怎麼接收fil e並保存?

我知道如何使用HTTP服務器是很好的方式對這個問題

但我768,16使用TCP服務器這樣的...

請幫幫我!我不能解決這個問題... T^T

+0

讀取文檔到cgi.FieldStorage – Daniel

+0

爲什麼要經歷這些痛苦時,有瓶還是傳銷,是我想知道的。 –

回答

0

文件上傳使用不同的內容類型;通常一個POST使用application/x-www-form-urlencoded,但文件上傳要求的形式使用multipart/form-data

cgi.FieldStorage類,通常會在CGI環境變量嗅出這一點,但你不使用CGI這裏,你正在分析在最低級別的一切。你必須在這裏CONTENT_TYPE頭經過:

form = cgi.FieldStorage(fp, environ={ 
    'REQUEST_METHOD':'POST', 'CONTENT_TYPE': 'multipart/form-data'}) 

理想情況下,頭從輸入頭解析,當然。

+0

謝謝!我做了你的答案,但錯誤發生..我寫了我的完整源代碼另一個問題!你能再幫我一次嗎?鏈接是[這裏](http://stackoverflow.com/questions/23723830/python-cgi-upload-error) – user3649308

相關問題