2

您好我正在尝试在 Tornado 中使用 StaticFileHandler,并且在大多数情况下它的工作,除了当我单击下载时它在网页中输出文件(.csv)。我可以保存文件的唯一方法是右键单击并将目标另存为(但这不适用于所有浏览器)。

如何强制下载文件?我知道我需要像这样设置 StaticFileHandler 的标题:

    self.set_header('Content-Type','text-csv')
    self.set_header('Content-Disposition','attachment')

但我不知道如何设置它,因为它是一个默认处理程序。

谢谢你的时间!

4

2 回答 2

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)

不要忘记在处理程序中使用您的扩展类!

于 2014-02-05T01:48:06.687 回答
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')
于 2021-03-17T18:42:32.927 回答