2013-07-18 62 views
2

您好我正在嘗試在Tornado中使用StaticFileHandler,並且大多數情況下它的工作方式,除了在單擊下載時在網頁上輸出文件(.csv)。我可以保存文件的唯一方法是右鍵單擊並說保存目標爲(但這不適用於所有瀏覽器)。使用StaticFileHandler在Tornado上託管一個文件Python

如何強制下載文件? 我知道我需要以某種方式設置StaticFileHandler的標題是這樣的:

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

但我不知道如何設置它,因爲它是一個默認的處理程序。

謝謝你的時間!

回答

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) 

不要忘記使用您的擴展類在處理程序!

+0

請注意,這可能會起作用,但web.StaticFileHandler的文檔顯然不鼓勵覆蓋get方法。 classmethod'set_extra_headers(path)'是支持的,可以用來代替。 – Jan