[英]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.