【问题标题】:mod_wsgi: Reading POSTed file content remains emptymod_wsgi:读取 POST 文件内容仍然为空
【发布时间】:2016-02-19 04:56:24
【问题描述】:

我不明白,我不明白。

在一个自行开发的 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),我认为一旦 formData.append() 接收到文件输入作为值,XMLHttpRequest 对象就会处理这个问题。

【问题讨论】:

    标签: javascript python ajax cgi wsgi


    【解决方案1】:

    好的,解决方法如下:

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

    我忽略的是,我实际上已经多次向他们提出过问题。 所以解决办法是先把文件的内容保存在一个变量中,然后多次使用。

    【讨论】:

    • 你能显示你需要的更改的代码 sn-p 吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2013-10-17
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多