Python论坛  - 讨论区

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

2006年06月30日 星期五 15:40

gashero harry.python at gmail.com
Fri Jun 30 15:40:53 HKT 2006

使用CherryPy做应用服务器的时候,刚刚开始用HTML做页面倒是没什么,可是后来需要图片了,却不知如何从CherryPy上返回图片。
CherryPy自带的例子里面的cptools.serveFile试过,但是失败了,调用的方法也不甚了解。
多谢!

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

2006年06月30日 星期五 15:50

肯定来过 rocker.yuan at gmail.com
Fri Jun 30 15:50:07 HKT 2006

不知道你说的是不是这个

http://www.cherrypy.org/trunk/docs/book/chunk/ch03.html#id3008306

在06-6-30,gashero <harry.python at gmail.com> 写道:
>
> 使用CherryPy做应用服务器的时候,刚刚开始用HTML做页面倒是没什么,可是后来需要图片了,却不知如何从CherryPy上返回图片。
> CherryPy自带的例子里面的cptools.serveFile试过,但是失败了,调用的方法也不甚了解。
> 多谢!
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>


-- 
因为你,我才在这沙漠中独步而行…
http://rocker.hbgfs.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060630/0bd2b57c/attachment.htm

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

2006年06月30日 星期五 16:48

gashero harry.python at gmail.com
Fri Jun 30 16:48:27 HKT 2006

看了一头雾水,而且没有试验成功。还在考虑,limodou兄写过一篇关于CherryPy发布静态文件的帖子,可是其中提到的很多包的名称,现在都已经不存在了,恐怕是N年以前的了。

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

2006年06月30日 星期五 17:50

Andelf andelf at gmail.com
Fri Jun 30 17:50:09 HKT 2006

在06-6-30,肯定来过 <rocker.yuan at gmail.com> 写道:

> 不知道你说的是不是这个
>
> http://www.cherrypy.org/trunk/docs/book/chunk/ch03.html#id3008306
>

这个是使用CP返回静态目录/文件的方法




>  在06-6-30, gashero <harry.python at gmail.com> 写道:
> >
> > 使用CherryPy做应用服务器的时候,刚刚开始用HTML做页面倒是没什么,可是后来需要图片了,却不知如何从CherryPy上返回图片。
> CherryPy自带的例子里面的cptools.serveFile试过,但是失败了,调用的方法也不甚了解。
> 多谢!
>

不晓得你说的图片是什么,如果是图像文件,那么设置文件中的
[/style.css]         #当访问 http://hostname/style.css  就会返回style.css文件中的内容
# style.css 应该和cp脚本在同一目录
static_filter.on = True
static_filter.file = "style.css"

[/static]       # 访问 http://hostname/static 定位到 /home/myweb 目录
static_filter.on = True
static_filter.dir = "/home/myweb"

如果是验证码之类,那么邮件中好象有个联通的mail使用的cgi脚本, pil的,应该可以参考下
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060630/cd5d067e/attachment.html

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

2006年06月30日 星期五 23:23

gashero harry.python at gmail.com
Fri Jun 30 23:23:14 HKT 2006

楼上的是Python吧的吧主,谢谢你。
如上的实验方法我开始测试了一次,失败了就懒得再试,倒是在CherryPy的Tutorial中的09 files.py中找到了好办法。
就是说一个暴露方法可以返回一个文件句柄,而CherryPy会自动读取句柄的文件内容并按照适当的格式返回。我实验成功后做了笔记,笔记如下:


・返回静态文件的方法
在处理器中返回文件的句柄即可
对于图片等等二进制文件,必须使用'rb'打开方式。
注意,在调试状态下,会因为CherryPy自动给每一个文件末尾加上调试信息,如文件大小和处理时间,所以小心文件的被修改。将服务器设置为发行状态即可。
处理静态文件比较合适的方法是使用default方法的参数。
小心CGI脚本攻击,注意检测输入参数中的'..'、'\'等等参数。但是,经测试表明,输入如上两个参数将会直接导致CherryPy的崩溃,而不是返回上一级文件。
可以考虑设置一个词典,键为发布文件名,值为磁盘文件名。来建立一个映射,这样可以很好的解决发布参数被攻击的问题,还可以有限制的发布。


如下是我当时的测试程序:


# -*- coding: gbk -*-
import cherrypy

class ShowPic:
	def __init__(self):
		return

	@cherrypy.expose
	def index(self):
		return open('index.html','r').read()

	@cherrypy.expose
	def default(self,filename):
		print ':'*10+filename
		fhandle=open(filename,'rb')
		if fhandle==None:
			print ':'*10+"None file handle"
		else:
			print ':'*10+"Not None"
		return fhandle

cherrypy.root=ShowPic()
cherrypy.server.start()



大家共勉,谢谢。

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号