下载 CSV 文件而不先将其保存到磁盘:在 web2py 中更改下载的文件名
Downloading a CSV without first saving it to disk: change downloaded filename in web2py
我修改了https://groups.google.com/forum/#!msg/web2py/HQU5kD0tGag/LGtjlikzWdsJ
无需先将其保存到磁盘即可下载 csv 文件:
在视图中,有一个按钮 'download',因此当点击时,视图不会改变,但会下载一个文件:
{{=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
效果很好。只有一个问题:当我单击 "download" 按钮时,文件名为 "Unknown"。如何将文件名更改为 "exported.csv" 或其他名称?
我从来没有 used/tried 在 link 中给出的解决方案由您分享。但我使用类似于以下的控制器,以 csv 格式下载 db table 的内容。
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())
为此,我参考了 controller/appadmin.py
中的 csv()
函数。
而且我不认为,您需要 ajax 下载文件。正常 link 会起作用,它不会改变视图或页面刷新。
{{=A(T('Download'), _type='button', _href=URL('default', 'export_to_csv'))}}
我修改了https://groups.google.com/forum/#!msg/web2py/HQU5kD0tGag/LGtjlikzWdsJ 无需先将其保存到磁盘即可下载 csv 文件:
在视图中,有一个按钮 'download',因此当点击时,视图不会改变,但会下载一个文件:
{{=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
效果很好。只有一个问题:当我单击 "download" 按钮时,文件名为 "Unknown"。如何将文件名更改为 "exported.csv" 或其他名称?
我从来没有 used/tried 在 link 中给出的解决方案由您分享。但我使用类似于以下的控制器,以 csv 格式下载 db table 的内容。
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())
为此,我参考了 controller/appadmin.py
中的 csv()
函数。
而且我不认为,您需要 ajax 下载文件。正常 link 会起作用,它不会改变视图或页面刷新。
{{=A(T('Download'), _type='button', _href=URL('default', 'export_to_csv'))}}