5

我有一个如下所示的表单(恰好位于 iframe 中):

<form id='picture-file-input-button' action='/post-picture' method='post' enctype='multipart/form-data' encoding='multipart/form-data'>
    <button type='button' class='choose-picture-button'>Choose picture</button>
    <input class='picture-file-input' type='file' />
</form>

我使用 $('#picture-file-input-button').submit() 提交表单,这工作正常。请求被发送到正确的 URL,我的 Flask 函数将其拾取并将响应正确地发送回客户端(iframe 被重新加载)。

我没有在 Flask 中做任何花哨的事情。它看起来像这样:

@app.route('/post-picture', methods=['POST'])
def post_provider_page_route():
    app.logger.debug(request)
    app.logger.debug(request.data)
    app.logger.debug(request.stream)
    app.logger.debug(request.files)
    app.logger.debug(request.form)
    return render_template('iframe_template.html')

调试所有输出空的 ImmutableMultiDict,除了 request.stream 输出:

<werkzeug.wsgi.LimitedStream object at 0x9a7d30c>

我希望看到该文件显示在 request.files 中。为什么它没有出现在 request.files 中?

4

1 回答 1

9

除非文件输入元素具有名称属性集,否则不会填充 request.files。name 属性可以设置为任何值。所以上述代码的修复是改变:

<input class='picture-file-input' type='file' />

<input class='picture-file-input' type='file' name='picture' />
于 2012-11-03T23:46:29.147 回答