繁体   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