4

フラスコのsend_file方法を使用して、ブラウザに .txt ファイルをダウンロードさせようとしています。問題は、ブラウザが何もダウンロードしないことです。

ここに私のpython関数があります:

@app.route('/download_zip', methods=['POST'])
def download_zip():
    file_name = 'test.txt'
    return flask.send_file(file_name, as_attachment=True, mimetype='text/plain')

POST リクエストをトリガーする jQuery 関数は次のとおりです。

function batchDownload() {
    $.post('/download_zip', {
        file_name: 'temp.zip'
    }).done(function(data) {
        alert(data);
    }).fail(function() {
        alert('Error.  Could not download files :(');
    });
}

面白いことalert(data)に、.done(...)コールバックでは、ファイルの内容がブラウザに表示されます。したがって、ブラウザはファイルのコンテンツを受信して​​いますが、ダウンロードしていません。

何か案は?

前もって感謝します!


編集

ページにフォームを追加しました:

<form id="download"></form>

そしてこれを.done(...)コールバックに追加しました:

    $form = $('#download');
    $form.submit();

サーバーの応答によって返されたデータ (ファイル) を POST 要求にリンクする必要があると思いますか?

4

1 に答える 1

9

これはフラスコ関連の質問ではありません。これがブラウザと JavaScript の仕組みです。

ファイルを Ajax でダウンロードしているため、結果は Ajax コールバックに渡されます。

代わりに、ブラウザに通常の方法でデータをダウンロードさせたいとします。

そのためには、 a を使用してそのメソッドformを呼び出す必要があります。隠しフィールドのあるページで を.submit()作成し、javascript 関数で送信するだけです。formそれはトリックを行う必要があります。

于 2013-08-16T13:34:19.270 に答える