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
I'd also love to be able to store files uploaded through a Zope form into a MySQL database so if anyone else has done this successfully, particularly for medium size files (5-6 MB) please can you let the list know! cheers, Chris 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 )
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.
Excellent, just what I was looking for. I have a few more questions before I try it out: 1. What is the type of the Foto column in MySQL? Is it BLOB, TEXT or something else like VARCHAR BINARY? 2. What size are the files you are storing? Small (< 1MB) Medium (1-5MB) or Large (> 5MB) and this to anyone who wants to answer: ;-) 3.
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.
Anyone know why? This is a little disturbing... cheers, Chris
Excellent, just what I was looking for. I have a few more questions before I try it out: 1. What is the type of the Foto column in MySQL? Is it BLOB, TEXT or something else like VARCHAR BINARY? It's BLOB 2. What size are the files you are storing? Small (< 1MB) Medium (1-5MB) or Large (> 5MB) < 1MB and this to anyone who wants to answer: ;-) 3.
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.
Anyone know why? This is a little disturbing... cheers, Chris _______________________________________________ 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 )
participants (3)
-
Chris Withers -
Juan Carlos Coruña -
Marius Kjeldahl