簡體   English   中英

python:解析HTTP POST請求w /文件上傳和其他參數

[英]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 UploaderSWFUpload )進行進度跟蹤,並完全跳過在服務器上的跟蹤。 然后,您無需獲得一系列AJAX請求即可獲得進度。

這似乎是違反直覺的(我覺得該模塊命名不佳),但email可能會做你想要的。 我從未使用它,但是同事在電子郵件處理系統中使用過; 由於這些消息本質上只是RFC 2822,因此email可能會解析它們。

乍一看email的文檔非常詳盡。

我的直覺是說你可能會在內存中結束這個文件,然而,你確實對此表示懊惱。

你可能想看看Django做了什么。 他們有一個非常好的自定義文件上傳處理程序實現,它允許你子類化它們以啟用進度條等等。查看文檔相關代碼 - 即使你不想使用Django,它一定會給你一些想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM