您好我正在尝试在Tornado中使用StaticFileHandler,并且大部分都在使用它,除了在我点击下载时在网页中输出文件(.csv)。我可以保存文件的唯一方法是右键单击并将目标另存为(但这并不适用于所有浏览器)。
如何强制下载文件? 我知道我需要以某种方式设置StaticFileHandler的头像:
self.set_header('Content-Type','text-csv')
self.set_header('Content-Disposition','attachment')
但我不知道如何设置它,因为它是默认处理程序。
谢谢你的时间!
答案 0 :(得分:3)
扩展web.StaticFileHandler
class StaticFileHandler(web.StaticFileHandler):
def get(self, path, include_body=True):
if [some csv check]:
# your code from above, or anything else custom you want to do
self.set_header('Content-Type','text-csv')
self.set_header('Content-Disposition','attachment')
super(StaticFileHandler, self).get(path, include_body)
别忘了在处理程序中使用扩展类!
答案 1 :(得分:0)
由于评论可能会被删除,正确解决方案(如 Jan 的评论中所述)是:
<块引用>[T] web.StaticFileHandler 的文档明确不鼓励覆盖 get 方法。支持类方法“set_extra_headers(path)”,可以替代使用。
正确的解决方案如下所示:
class StaticFileHandler(web.StaticFileHandler):
@classmethod
def set_extra_headers(self, path):
if path.endswith('.csv'):
self.set_header('Content-Type', 'text-csv')
self.set_header('Content-Disposition', 'attachment')