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 回调。

相反,您想让浏览器以他通常的方式下载数据。

为此,您必须使用 aform并在其上调用.submit()方法。只需form在带有隐藏字段的页面中创建并在 javascript 函数中提交即可。它应该可以解决问题。

于 2013-08-16T13:34:19.270 回答