2006年07月01日 星期六 00:09
谢谢两位仁兄帮忙,使用配置文件发布静态文件的方式我也测试成功了,效果很不错。无论何时都不会给附加上那个可恶的响应时间和文件大小了。如下是测试使用的配置文件段: [/image] static_filter.on=True static_filter.dir="D:\static\image"
2006年07月01日 星期六 12:30
不过好象只要是以"rb"打开的图象文件,IE中都可以打开 貌似不规范,header是默认的test/html 经过简单测试,直接返回文件的句柄的header也是test/html, 呃,行是行,就是感觉不爽... 改header吧~ 在06-7-1,gashero <harry.python at gmail.com> 写道: > > > 谢谢两位仁兄帮忙,使用配置文件发布静态文件的方式我也测试成功了,效果很不错。无论何时都不会给附加上那个可恶的响应时间和文件大小了。如下是测试使用的配置文件段: > > > [/image] > static_filter.on=True > static_filter.dir="D:\static\image" > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060701/b670fef1/attachment.html
2006年07月03日 星期一 00:33
最新版本的图片发布 虽然还是通过方法的返回,返回一个文件的句柄的方式来返回静态文件内容,但是返回的内容却很不好办。我以前以为可以用default的方式用客户端提交的文件名来返回特定的文件,可是客户端并非使用扩展名识别文件类型。而是使用HTTP协议头的Content-Type的MIME类型来识别文件类型。 所以我最终实验中返回VRML脚本vrml.wrl时就出了错误了,客户端显示了VRML的源码,却没有执行。如下是我最终的实现版本,实现了发布VRML文件,并修改了Content-Type来控制返回文件类型,通知浏览器做相应的处理。 # -*- coding: gbk -*- # Date: 2006-06-18 # Author: gashero # Copyright at 1999-2006, Harry Gashero Liu. # Comment: 启动主服务器 """\ Usage: """ import cherrypy import book_ticket import gas_config import showall import select import os import os.path import chcolor import refresh basepath=os.getcwd() imagespath=os.path.join(basepath,'images') mapspath=os.path.join(basepath,'maps') #配置文件的文件名 SETTING_FILE='setting.ini' class Main: """主启动类 """ def __init__(self): self.book=book_ticket.BookTicket() self.refund=book_ticket.RefundTicket() self.select=select.Select() self.refresh=refresh.RefreshVRML() pass return @cherrypy.expose def index(self): return open('index.html').read() @cherrypy.expose def main(self): return open('mainframe.html').read() @cherrypy.expose def toolbar(self): return open('toolbar.html').read() @cherrypy.expose def welcome(self): return open('welcome.html').read() @cherrypy.expose def showall(self): return showall.showall() @cherrypy.expose def err(self,msg=None): return "Error!
\n"+str(msg) # @cherrypy.expose # def select(self): # return "Select ..." # @cherrypy.expose # def vr(self): # ff=open('vrml/55.wrl','rb') # return ff @cherrypy.expose def help(self): return open('help.html').read() @cherrypy.expose def about(self): return open('about.html').read() @cherrypy.expose def default(self,filename,**o): if filename=='vrml.wrl': cherrypy.response.headerMap['Content-Type']='application/x-vrml' f=open('new.wrl','rb') return f #初始化配置文件标志 gas_config.getconfig(SETTING_FILE) cherrypy.root=Main() settings={ 'global':{ 'server.socket_port':7777, 'server.socket_host':'', 'server.socket_file':'', 'server.socket_queue_size':5, 'server.protocol_version':'HTTP/1.0', 'server.log_to_screen':True, 'server.log_file':'', 'server.reverse_dns':False, 'server.thread_pool':10, 'sessionFilter.on':True, 'sessionFilter.storageType':"ram", 'sessionFilter.Timeout':1800, 'server.environment':"production" }, '/images':{ 'static_filter.on':True, 'static_filter.dir':imagespath }, #'/vr':{ # 'static_filter.on':True, # 'static_filter.dir':vrmlpath # }, #'/vrml.wrl':{ # 'static_filter.on':True, # 'static_filter.file':os.path.join(basepath,'new.wrl') # }, '/maps':{ 'static_filter.on':True, 'static_filter.dir':mapspath }, } cherrypy.config.update(settings) cherrypy.server.start() # server.environment='production' # server.environment='development' 其中最后的default方法发布了一个VRML文件。另外需要注意的是CherryPy默认的静态文件发布方式是通过缓存的,这样虽然更新了文件的内容,可是每次下载的还是旧版的文件。所以最后才取此下策,每次请求都读取文件一次并返回,来确保每次返回最新的版本。
Zeuux © 2025
京ICP备05028076号