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')

出力する request.stream を除いて、すべての出力空の ImmutableMultiDict をデバッグします。

<werkzeug.wsgi.LimitedStream object at 0x9a7d30c>

ファイルが request.files に表示されることを期待しています。request.files に表示されないのはなぜですか?

4

1 に答える 1

9

file 入力要素に name 属性が設定されていない限り、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 に答える