![](/img/trans.png)
[英]Make an http POST request to upload a file using Python urllib/urllib2
[英]python: parse HTTP POST request w/file upload and additional params
任務很簡單:在服務器端(python)接受HTTP POST,其中包含上傳的文件和更多的表單參數。
我正在嘗試實現上傳進度指示器,因此我需要能夠逐塊讀取文件內容。
我發現的所有方法都基於cgi.FieldStorage,它以某種方式只允許我完整地獲取文件(在內存中,這本身就是一個災難)。 有人建議重新定義FieldStorage.make_file方法(),它似乎打破了cgi實現(很奇怪......)。
我目前能夠通過chunk讀取整個wsgi輸入到文件系統,從而產生以下數據:
-----------------------------9514143097616
Content-Disposition: form-data; name="myfile"; filename="inbound_marketing_cartoon_ebook.pdf"
Content-Type: application/pdf
... 1.5 MB of PDF data
-----------------------------9514143097616
Content-Disposition: form-data; name="tid"
194
-----------------------------9514143097616--
有誰知道是否有任何Python庫可以可靠地解析這個東西? 或者我應該手動執行此操作? (Python 2.5即)
謝謝。
正如你的建議,我會(以前做過)覆蓋FieldStorage
對象的make_file
方法。 只需返回一個具有write
方法的對象,該方法既接受數據又接受數據(進入文件或內存或者有什么),並跟蹤接收進度指示器的數量。
通過這種方式,您還可以訪問文件的長度(由客戶端提供),文件名以及在其下發布的密鑰。
為什么這似乎打破了CGI實現?
另一種選擇是在瀏覽器中使用閃存上傳器( YUI Uploader和SWFUpload )進行進度跟蹤,並完全跳過在服務器上的跟蹤。 然后,您無需獲得一系列AJAX請求即可獲得進度。
這似乎是違反直覺的(我覺得該模塊命名不佳),但email
可能會做你想要的。 我從未使用它,但是同事在電子郵件處理系統中使用過; 由於這些消息本質上只是RFC 2822,因此email
可能會解析它們。
乍一看, email
的文檔非常詳盡。
我的直覺是說你可能會在內存中結束這個文件,然而,你確實對此表示懊惱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.