python:解析带有文件上传和附加参数的 HTTP POST 请求

gno*_*sis 5 python upload wsgi

任务很简单:在服务器端 (python) 接受包含上传文件和更多表单参数的 HTTP POST。

我正在尝试实现上传进度指示器,因此我需要能够逐块读取文件内容。

我发现的所有方法都基于 cgi.FieldStorage,它以某种方式只允许我获取整个文件(在内存中,这本身就是一场灾难)。有些人建议重新定义 FieldStorage.make_file 方法(),这似乎破坏了 cgi 实现(奇怪...)。

我目前能够逐块读取整个 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--
Run Code Online (Sandbox Code Playgroud)

有谁知道是否有任何 Python 库可以可靠地解析这个东西?还是我应该手动执行此操作?(即 Python 2.5)

谢谢。

Mik*_*ers 2

正如您所建议的,我会(并且之前已经这样做过)覆盖对象make_file的方法FieldStorage。只需返回一个对象,该对象具有一个write既接受数据(进入文件或内存或其他什么)的方法,又跟踪进度指示器已收到的数据量。

通过这种方式,您还可以访问文件的长度(由客户端提供)、文件名以及发布该文件的密钥。

为什么这似乎破坏了您的 CGI 实现?

另一种选择是使用 Flash 上传器(例如YUI UploaderSWFUpload)在浏览器中进行进度跟踪,并完全跳过在服务器上进行跟踪。那么您就不必通过一系列 AJAX 请求来获取进度。