Marius Kjeldahl wrote:
After some helpful advice, I have been successful in uploading files (images) to Zope. Now I am trying to stuff the uploaded images in a MySQL database, but am not able to access the image data.
If I try to stuff the image data "raw" into the database by declaring a image:string parameter to the ZSQL Method and <dtml-sqlvar image> in the ZSQL code I get a string like "<ZPublisher.HTTPRequest.FileUpload instance at 87956214>".
Another approach I have tried was <dtml-var image fmt=sql-quote>, but this complains about the image being an instance and not a string.
Another approach has been to access the actual "raw" image data using image.data in various combinations, but I have not gotten this to work anywhere (contrary to what it seems other people have managed to do), see this
http://www.egroups.com/group/zope/26227.html?
posting.
Looking through Image.py I see quote a few methods for accessing the image as a "web" object through the use of URL. Internally, Image.py uses the data attribute extensively, but I have not been able to access this from within DTML (and I guess this has to do with data not being listed in either the properties or permission sections of Image.py).
My final try will probably be to resort to using an External method to get access to the "full" Image.py object (including data), but I was hoping to avoid this.
Has anybody done this (uploading in Zope and storing the data outside of Zope) successfully? If so, please give me a hint..
Thanks,
Marius Kjeldahl
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
Hello Marius, TI am a Newbie to Zope and this is the first time I post a Answer to the mailing list. But I had the same problem and I hope I can help you. After a lot of test I find out the following method to upload images to MySQL and after that retrieve it in the web pages. Write the folliwing ZSQL method: Arguments: N_ Titulo Subtitulo Texto Foto insert into Novedad (N_, Titulo, Subtitulo, Texto, Foto) values ( <dtml-sqlvar N_ type=string>, <dtml-sqlvar Titulo type=string>, <dtml-sqlvar Subtitulo type=string>, <dtml-sqlvar Texto type=string>, <dtml-sqlvar "_.string.replace(REQUEST['Foto'].read(),'\010','\\010')" type=string> ) Note that I replace the octal char 010 by the string "\\010". If you don´t escaape this char MySQL change it for the char 008. I don't know why. To upload the image I have the following DTML Method: <form action="novedades" method="post" ENCTYPE="multipart/form-data"> <input type="hidden" name="accion" value="insertar_novedad"> Nº producto: <select name="N_"> <dtml-in listar_N__producto> <option value="<dtml-var N_>"><dtml-var N_></option> </dtml-in> </select><p> Título: <textarea rows="2" cols="20" name="Titulo"></textarea><p> Subtítulo: <textarea rows="2" cols="20" name="Subtitulo"></textarea><p> Texto: <textarea rows="8" cols="40" name="Texto"></textarea><p> Foto: <input type="file" name="Foto"><p> <input type="submit" name="submit"> </form> Note the the line "Foto: <input type=....". And to retrieve the image I have this DTML Method: Method name: image <dtml-in obtener_foto> <dtml-call "RESPONSE.setHeader('Content-Type', 'image/gif')"> <dtml-call "RESPONSE.setHeader('Content-Length', _.len(Foto))"> <dtml-var "_.string.replace(Foto,'\\010','\010')"> </dtml-in> Note that you must put the 5 lines in the same line (without newlines). ZSQL Method name "obtener_foto": Arguments: N_ select Foto from Novedad where <dtml-sqltest N_ type=string> To insert the image in an dtml method: <img src="image?N_=AC-M56E"> Hope this can help you.