开发者

Problems outputting an image over http using Python

I'm trying to load an image file from my local disk and output it over http when the script is accessed on my webserver via cgi.

For example I want http://example.com/getimage.py?imageid=foo to return the corresponding image. Just opening the file and printing imgfile.read() after the appropriate content headers, however, causes the image to be scrambled. Clearly the output isn't right, but I have no idea why.

What would be the best way to do this, using the built-in modules of 2.6?

Edit:

The code essentially boils down to:

imgFile=open(fi开发者_如何学JAVAleName,"rb")
print "Content-type: image/jpeg"
print
print imgFile.read()
imgFile.close()

It outputs an image, just one that seems to be random data.


You probably have to open() your image files in binary mode:

imgfile = open("%s.png" % imageid, "rb")
print imgfile.read()

On Windows, you need to explicitly make stdout binary:

import sys
if sys.platform == "win32":
    import os, msvcrt
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

You also might want to use CR+LF pairs between headers (see RFC 2616 section 6):

imgFile = open(fileName, "rb")
sys.stdout.write("Content-type: image/jpeg\r\n")
sys.stdout.write("\r\n")
sys.stdout.write(imgFile.read())
imgFile.close()


Python comes with its own HTTP module, SimpleHTTPServer - why not check out SimpleHTTPServer.py in the /Lib directory of your Python installation, and see how it is done there?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜