mod_wsgi:读取POSTed文件内容仍为空

时间:2015-11-17 17:32:45

标签: javascript python ajax cgi wsgi

我不理解,我不明白。

在自行开发的Python Web框架中,我使用JavaScript将文件表单元素发布到服务器。

var formData = new FormData();
formData.append('file', document.getElementById('file').files[0]);
var request = new XMLHttpRequest();
request.open("POST", url, true);
request.send(formData);

运行mod_wsgi的服务器接收如下请求:

if environ['REQUEST_METHOD'] == 'POST':
    post_env = environ.copy()
    post_env['QUERY_STRING'] = ''
    form = cgi.FieldStorage(
            fp=environ['wsgi.input'],
            environ=post_env,
            keep_blank_values=True) 

然后,当我想访问表单字段的内容以将其保存到文件时,以下内容将返回一个空结果:

form['file'].file.read()

(为简单起见,所有代码都已编辑)

让我感到困惑的是,表单字段将显示正确的文件名和MIME类型,只有file.read()仍为空。

此外,来自其他输入文本字段的所有其他信息都可以访问并且可以访问。 我还检查了environ['REQUEST_METHOD']实际上是POST

对于用于编码的HTTP标头(例如multipart/form-data),我认为XMLHttpRequest对象将在formData.append()接收文件输入作为值时处理。< / p>

1 个答案:

答案 0 :(得分:0)

好的,这是解决方案:

我无法解释它,但文件表单字段在第一次读取时被清空,我意外地发现了。也许是一个错误,谁知道。 我认为它们将保持原样(与任何其他变量一样)并且可以多次读取。

我忽略的是我实际上已经多次解决了这些问题。 因此,解决方案是首先将文件的内容存储在变量中,然后多次使用。