我正在尝试使用mod_wsgi建立上传xml文件的可能性。为此,我建立了一个像这样的公式:
<form action="upload.py" method="post" enctype="multipart/form-data">
<input name="file" type="file" accept="text/xml"><br/>
<input type="submit" value="upload">
</form>
和文件upload.py
:
..
form = cgi.FieldStorage(fp=environ['wsgi.input'],
environ=environ,
keep_blank_values=True)
fileitem = form['file']
..
然而,这在访问表格中的“文件”时给了我一个关键词。打印environ['wsgi.input'].read(request_body_size)
显示:
------WebKitFormBoundaryeplWkFZe2clFMtgf
Content-Disposition: form-data; name="file"; filename="file.xml"
Content-Type: application/octet-stream
<?xml version="1.0" ?>
....
因此,wsgi.input似乎是有效的。调试公开了cgi.FieldStorage() = FieldStorage(None, None, [])
。你知道问题出在哪里吗?我错过了什么吗?
答案 0 :(得分:0)
我注意到了这一点并放置了一行:
request_body_size = int( environ.get('CONTENT_LENGTH') )
print environ['wsgi.input'].read(request_body_size)
在以cgi.FieldStorage()
作为参数调用wsgi.input
之前 ,它会显示正文。显然,wsgi.input
fileIO-object在FS内被消耗,之后无法读取它。我在尝试将它与FS一起使用之前尝试了两次,同样的事情发生了,只有第一次工作。
编辑:是的,更糟糕的是,wsgi.input没有实现.seek()方法将其重新开始。唯一合理的方法是将它复制到io.BytesIO类实例中并将 输入FS。无论如何,它可以用.seek()回卷。请注意,可以使用StringIO,但如果您要上传二进制文件,则会中断。