CherryPy发布静态文件的方法

CherryPy发布静态文件的方法

    可以使用两种方式发布CherryPy中的静态文件,比如发布图片或者其他不需要修改(by gashero)的静态文件。

    ·发布一个目录,如/images。需要修改CherryPy的配置,可以加入如下的一条来发布。
'/images':{
    'static_filter.on':True,
    'static_filter.dir':'/images'
    }, #by gashero
    如果是需要发布仅仅一个文件,则如下方法:
'/vrml.wrl':{
    'static_filter.on':True,
    'static_filter.file':'new.wrl'
    }
    按照这种发布时,发布的文件名可以随意修改,客户端所见到的文件名并非真正的文件名。
    ·按照返回文件句柄的方式。有些文件按照如上的方式在客户端是无法正确的识别文件类型的,比如上例发布的VRML源文件。所以偶尔需要这种底层一点,但是功能强大的方式-返回文件句柄。
    返回文件句柄一般是使用default方法,从第一个参数获得客户端请求的文件名,然后判断此文件名是否允许响应,再根据对应文件名打开文件句柄并通过return返回此句柄。
    但是注意的是,客户端浏览器(by gashero)并不是使用扩展名来识别文件类型的,而是通过HTTP头字段的'Content-Type'的MIME类型来识别的。所以对于一些怪异的文件类型,需要自己指定MIME类型才可以正确的显示。
    如下的完整例子是用于返回一个VRML源文件的,并且客户端可以正确的显示。default方法多加的**o参数用于屏蔽多余的参数。此处只做了一个文件的返回,可以根据需要多加几个elif。
    @cherrypy.expose #by gashero
        def default(self,filename,**o):
            if filename=='vrml.wrl':
                cherrypy.response.headerMap['Content-Type']='application/x-vrml'
                f=open('new.wrl','rb')
                return f
    散会 

你可能感兴趣的