Python论坛  - 讨论区

标题:Re: [python-chinese] CherryPy如何返回图片

2006年07月01日 星期六 00:09

gashero harry.python at gmail.com
Sat Jul 1 00:09:33 HKT 2006

谢谢两位仁兄帮忙,使用配置文件发布静态文件的方式我也测试成功了,效果很不错。无论何时都不会给附加上那个可恶的响应时间和文件大小了。如下是测试使用的配置文件段:


[/image]
static_filter.on=True
static_filter.dir="D:\static\image"

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月01日 星期六 12:30

Andelf andelf at gmail.com
Sat Jul 1 12:30:07 HKT 2006

不过好象只要是以"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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月03日 星期一 00:33

gashero harry.python at gmail.com
Mon Jul 3 00:33:10 HKT 2006

最新版本的图片发布


虽然还是通过方法的返回,返回一个文件的句柄的方式来返回静态文件内容,但是返回的内容却很不好办。我以前以为可以用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默认的静态文件发布方式是通过缓存的,这样虽然更新了文件的内容,可是每次下载的还是旧版的文件。所以最后才取此下策,每次请求都读取文件一次并返回,来确保每次返回最新的版本。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号