使用Ajax和Flask下载Excel文件

Jas*_*pel 3 javascript python ajax flask

用户按下form页面上的按钮:

<form id="form">
    <input type="button" id="export" value="Export"/>
</form>
Run Code Online (Sandbox Code Playgroud)

单击该按钮后,将进行以下Ajax调用:

ajaxCall('/export', {}, callback_export, 'get');
Run Code Online (Sandbox Code Playgroud)

哪里

function ajaxCall(url, params, callback, type) {
    if (validate()) {
        var request;
        request = $.ajax({
            url: url,
            type: type,
            data: params
        });
    }
    request.done(function (response, textStatus, jqXHR){
        callback(response);
    });
}
Run Code Online (Sandbox Code Playgroud)

Flask应用程序看起来像这样:

@app.route('/export')
def export():
    xl_file= '/absolute/path/to/excel/file.xlsx'
    return send_file(xl_file, as_attachment=True, mimetype='application/vnd.ms-excel')
Run Code Online (Sandbox Code Playgroud)

文件的文件内容将返回到浏览器(请参见下图),但不会将文件本身作为附件返回.

问题是,回调需要什么来接受作为文件附件的响应?或者,需要进行哪些修改?

(是的,我搜索并阅读了SE上的许多帖子.大多数讨论使用该form.submit()方法但不提供详细信息.我希望避免使用,form.submit()因为其中的其他元素#form无法提交.)

在此输入图像描述

小智 6

你真的需要使用ajax吗?我发现ajax是一个用烧瓶下载excel文件的工作......但它对我不起作用.我只需在'rb'模式下打开excel文件,并将mimetype更改为在windows中识别为excel文件.你的Flast只需要调用getPlotExcel().

@app.route("/getPlotExcel")
def getPlotExcel():
    excelDownload = open("sample.xlsx",'rb').read()
    return Response(
        excelDownload,
        mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        headers={"Content-disposition":
                 "attachment; filename=sample.xlsx"})
Run Code Online (Sandbox Code Playgroud)