下载CSV而不先将其保存到磁盘:在web2py中更改下载的文件名

时间:2016-08-30 13:40:57

标签: csv download web2py

我修改了https://groups.google.com/forum/#!msg/web2py/HQU5kD0tGag/LGtjlikzWdsJ 下载csv文件而不必先将其保存到磁盘:

在“视图”中,有一个“下载”按钮,以便在单击时,视图不会更改,但会下载文件:

{{=A(T('Download'), _type='button', _onclick=\
"jQuery('#PLID').val('%s');ajax('%s',['arg1','arg2'],':eval'); 
"%( request.vars.my_form_variable),URL('dlCSV') ), _class='btn btn-primary') }}

在控制器中:

def dlCSV():
    :
    :
    :

    rows=db(query).select(selected_fields)
    doc64=embed64(data=str(rows),extension='application/csv')

    response.headers['Content-Type'] = 'text/csv'
    attachment = 'attachment;filename=data.csv'
    response.headers['Content-Disposition'] = attachment

    return 'window.location="%s";' % doc64

这很有效。只有一个问题:当我点击“下载”按钮时,文件名是“未知”。如何将文件名更改为“exported.csv”或其他内容?

1 个答案:

答案 0 :(得分:1)

我从未使用/尝试过您在共享的链接中提供的解决方案。但我使用类似于以下的控制器,以csv格式下载db表的内容。

def export_to_csv():
    import gluon.contenttype
    response.headers['Content-Type'] = gluon.contenttype.contenttype('.csv')

    response.headers['Content-disposition'] = 'attachment; filename=data.csv'
    query = (db.dummy_table.id > 0)
    return str(db(query).select())

我为csv()引用了controller/appadmin.py函数。

我不认为,你需要ajax下载文件。普通链接将起作用,它不会更改视图或页面刷新。

{{=A(T('Download'), _type='button', _href=URL('default', 'export_to_csv'))}}