在Tornado Web中更改特定静态文件的MIME类型

6 投票
2 回答
1951 浏览
提问于 2025-04-17 18:42

我在服务器的/static/目录下有一堆文件,名字像这样:

Slide0.html    Slide121.html  Slide143.html  Slide165.html  Slide187.html  Slide208.html  
Slide28.html   Slide4.html   Slide71.html  Slide93.html
Slide100.html  Slide122.html  Slide144.html  Slide166.html  Slide188.html  Slide209.html  

我在同一个域名下定期获取这些文件,并把它们插入到一个iframe中,它们的作用就是显示一些图片,但浏览器却给出了以下错误:

Resource interpreted as Image but transferred with MIME type text/html: "http://localhost:8888/static/Slide66.html". 

我尝试过继承staticfilehandler,但没有成功:

class StaticHandler(tornado.web.StaticFileHandler):

def get(self, path):
    abspath = os.path.abspath(os.path.join(self.root, path))
    mime_type, encoding = mimetypes.guess_type(abspath)
    if mime_type:
        self.set_header("Content-Type", mime_type)

    if 'Slide' in abspath:
        self.set_header('Content-Type',"image/jpg" )

但是错误依然存在,我该怎么调整呢?

2 个回答

0

问题在于你的浏览器正在尝试把“Slide66.html”当作图片来加载。你可能在生成HTML代码时,用“Slide66.html”作为“img”标签的“src”属性。

Tornado的做法是对的。如果“Slide66.html”真的是一张图片,那它应该是“Slide66.jpg”。如果它确实是HTML文件,那就不能用作图片的“src”。

6

在Tornado 3.1中,你可以创建一个新的类,继承自StaticFileHandler,并且重写get_content_type()这个方法。

class StaticJSONFileHandler(tornado.web.StaticFileHandler):
    def get_content_type(self):
        return 'application/json'

撰写回答