Displaying images stored as binary in MySQL

Blaktyger blaktyger at hotmail.com
Mon Aug 16 18:06:28 EDT 2004


Benjamin Niemann <b.niemann at betternet.de> wrote in message news:<cfpvas$607$1 at online.de>...
> >>>How can this be done? Images are stored in a LONGBLOB field. When I
> >>>try to display them, it prints out the binary data as it is...
> >>
> >>Display where? On local screen, in a webbrowser?
> >>Assuming the first one, see post by Tom.
> >>Assuming the second one (you're writing a cgi,mod_python... program), 
> >>did you set the content-type in the http header correctly?
> > 
> > In a webbrowser...
> > this is my code...
> > 
> > #!/usr/bin/python2.3
> > 
> > print 'Content-Type:image/jpeg\n\n'
> You must use '\r\n' to terminate header lines. I'm not really sure, but 
> maybe there should also be a spacing between ':' and 'image/jpeg'...
> If you are using e.g. FireFox as a browser, you can user 'View Page 
> Info' to see, if the browser correctly understands, what you are trying 
> to tell it ('Type' should say 'image/jpeg').
> 
> > import blakHtml, sys
> > sys.stderr = sys.stdout
> > import MySQLdb
> > import urllib
> > import cgi
> > import time
> > prevPg=blakHtml.HTMLDocument()
> > newConnection=MySQLdb.connect(host='localhost', user='blaktyger', \
> >                                            passwd='****', db='photoFamille')
> > curseur=newConnection.cursor()
> > 
> > sqlCmdFr="""SELECT *  FROM photo"""
> > curseur.execute(sqlCmdFr)
> > resultats = curseur.fetchall()
> > p=0
> > for val in resultats:
> >     p=p+1
> >     #print '<img src=" ' + val[5]+ ' " ' +' >' THIS DOES NOT WORK
> >     print val[5]
> > newConnection.close()
> > I know there is no HTML code but this is just a test...
> val[5] contains the raw image data (not a path), correct? Does 'photo' 
> contains more than one image? Concatenating several images into one 
> bytestream, is definitly not what you want.

val[5] contains only one image but I saw that when printing out val[5]
is that the binary data is in a array. So this i what I did...

import array
[same code as before except for this... ]

print 'Content-Type: image/jpeg\r\n'
[...]
for val in resultats:
    p=p+1
    img=''
    t=''
    # t is an array object. the tostring() argument extracts the
binary data
    t=val[5].tostring()
    print t
and it works!
Thanks for your help Ben!



More information about the Python-list mailing list