mod_wsgi:读取POSTed文件内容保持为空

mod_wsgi: Reading POSTed file content remains empty

本文关键字:文件 wsgi 读取 POSTed mod      更新时间:2023-09-26

我不明白,我不明白。

在一个自行开发的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);

服务器sportsmod_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),我认为一旦formData.append()接收到作为值的文件输入,XMLHttpRequest对象就会处理它。

好吧,这是解决方案:

我无法解释,但文件表单字段在第一次读取时被清空,这是我偶然发现的。也许是个虫子,谁知道呢。我假设它们会保持不变(就像任何其他变量一样),并且可以被多次读取。

我忽略的是,事实上我已经向他们讲了好几次了。因此,解决方案是首先将文件的内容存储在一个变量中,然后多次使用该变量。