Thread: blobs in a client/server environment
Hello, I have been playing around with storing images with setBinaryStream and getBinaryStream for a couple of days now, but I am continually running into a problem. I don't know if I am getting the data in the right format or not, but I am not able to get my image from the database. I have a client/server environment and when I get the image back from the database that is done on the server. So I do not want to write the InputStream as a file, instead as an array of bytes which are sent back to the client. I recive no errors when putting the image into the database and getting the image out of the database, where I get my error is when I try to generate the image from the array of bytes. To put the image into the database (no errors): FileInputStream fis = new FileInputStream(file); PreparedStatement ps = con.prepareStatement("update userpreferences set image=?, time=? where username=?"); ps.setBinaryStream(1, fis, length); ps.setInt(2, (int)new java.util.Date().getTime()); ps.setString(3, user); ps.executeUpdate(); ps.close(); fis.close(); con.commit(); con.close(); To get the image from the database and put it into an array of bytes (no errors): con.setAutoCommit(false); PreparedStatement ps = con.prepareStatement("select image from userpreferences where username=?"); ps.setString(1, user); ResultSet rs = ps.executeQuery(); con.commit(); if(rs != null) if(rs.next()){ InputStream is = rs.getBinaryStream(1); ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); int data; while ((data = is.read()) != -1) byteStream.write((byte)data); byte[] buf = byteStream.toByteArray(); is.close(); rs.close(); con.close(); return buf; I get my error when I try to create my image with the library Jimi. byte[] data = (got bytes from above); Image image = Jimi.getImage(new ByteArrayInputStream(data)); The error stack trace I get is: com.sun.jimi.core.JimiException: Error creating image. at com.sun.jimi.core.raster.JimiRasterImageImporter.importImage(JimiRasterImageImporter.java:48) at com.sun.jimi.core.Jimi.createRasterImage(Jimi.java:929) at com.sun.jimi.core.Jimi.createRasterImage(Jimi.java:720) at com.sun.jimi.core.Jimi.createRasterImage(Jimi.java:699) at com.sun.jimi.core.Jimi.putImage(Jimi.java:587) at com.sun.jimi.core.Jimi.putImage(Jimi.java:575) at org.opensimpx.client.gui.ClientGUI.setupGUI(ClientGUI.java:216) at org.opensimpx.client.gui.ClientGUI.<init>(ClientGUI.java:147) at org.opensimpx.client.gui.ClientGUI.main(ClientGUI.java:419) at org.opensimpx.client.login.Login.startClient(Login.java:535) at org.opensimpx.client.login.Login.main(Login.java:340) Is this because of how I handled my data, are the bytes bad, do I need to convert them back to a file since I put them into the database from a file? Any help would be greatly appreciated, Thanks in advanced. Matt
Matt Fair <matt@netasol.com> writes: > Hello, > I have been playing around with storing images with setBinaryStream > and getBinaryStream for a couple of days now, but I am continually > running into a problem. I don't know if I am getting the data in the > right format or not, but I am not able to get my image from the > database. > I have a client/server environment and when I get the image back from > the database that is done on the server. So I do not want to write > the InputStream as a file, instead as an array of bytes which are sent > back to the client. > I recive no errors when putting the image into the database and > getting the image out of the database, where I get my error is when I > try to generate the image from the array of bytes. Did you create the database with the -E UNICODE option? If not, I think you might find that the data is being stored as 7 bit ascii. Caught me out too. :-) HTH -- Pete Jewell Example Systems Ltd. -------------------- The views expressed in this email may not be those of Example Systems Ltd unless explicitly stated.
Hello, I did set the encoding to UNICODE and it still does not show the blob image. My error from the JIMI library is the following: Error getting remote image: Cannot find encoder for type: png com.sun.jimi.core.JimiException: Cannot find encoder for type: png at com.sun.jimi.core.JimiWriter.<init>(JimiWriter.java:51) at com.sun.jimi.core.Jimi.putImage(Jimi.java:670) at org.opensimpx.client.gui.ClientGUI.setupGUI(ClientGUI.java:218) at org.opensimpx.client.gui.ClientGUI.<init>(ClientGUI.java:148) at org.opensimpx.client.gui.ClientGUI.main(ClientGUI.java:421) at org.opensimpx.client.login.Login.startClient(Login.java:535) at org.opensimpx.client.login.Login.main(Login.java:340) So it does read the stream as a png. I don't think this is a JIMI library error, since I have created many images with the jimi library, and it is very easy to use. It must be something that I missed. I will look at it again and see what else I can do with the database. Any ideas? Thank you, Matt Pete Jewell wrote: >Matt Fair <matt@netasol.com> writes: > >>Hello, >>I have been playing around with storing images with setBinaryStream >>and getBinaryStream for a couple of days now, but I am continually >>running into a problem. I don't know if I am getting the data in the >>right format or not, but I am not able to get my image from the >>database. >>I have a client/server environment and when I get the image back from >>the database that is done on the server. So I do not want to write >>the InputStream as a file, instead as an array of bytes which are sent >>back to the client. >>I recive no errors when putting the image into the database and >>getting the image out of the database, where I get my error is when I >>try to generate the image from the array of bytes. >> > >Did you create the database with the -E UNICODE option? If not, I >think you might find that the data is being stored as 7 bit ascii. >Caught me out too. :-) > >HTH >
Does anyone know if it is nessesary to have objects stored into the database encoded as unicode that you had to compile the database with the following opions: --enable-unicode-conversion --enable-multibyte Thanks, Matt Matt Fair wrote: > Hello, > I did set the encoding to UNICODE and it still does not show the blob > image. > My error from the JIMI library is the following: > > Error getting remote image: Cannot find encoder for type: png > com.sun.jimi.core.JimiException: Cannot find encoder for type: png > at com.sun.jimi.core.JimiWriter.<init>(JimiWriter.java:51) > at com.sun.jimi.core.Jimi.putImage(Jimi.java:670) > at org.opensimpx.client.gui.ClientGUI.setupGUI(ClientGUI.java:218) > at org.opensimpx.client.gui.ClientGUI.<init>(ClientGUI.java:148) > at org.opensimpx.client.gui.ClientGUI.main(ClientGUI.java:421) > at org.opensimpx.client.login.Login.startClient(Login.java:535) > at org.opensimpx.client.login.Login.main(Login.java:340) > > > So it does read the stream as a png. I don't think this is a JIMI > library error, since I have created many images with the jimi library, > and it is very easy to use. It must be something that I missed. > > I will look at it again and see what else I can do with the database. > > Any ideas? > > Thank you, > Matt > Pete Jewell wrote: > >> Matt Fair <matt@netasol.com> writes: >> >>> Hello, >>> I have been playing around with storing images with setBinaryStream >>> and getBinaryStream for a couple of days now, but I am continually >>> running into a problem. I don't know if I am getting the data in the >>> right format or not, but I am not able to get my image from the >>> database. >>> I have a client/server environment and when I get the image back from >>> the database that is done on the server. So I do not want to write >>> the InputStream as a file, instead as an array of bytes which are sent >>> back to the client. >>> I recive no errors when putting the image into the database and >>> getting the image out of the database, where I get my error is when I >>> try to generate the image from the array of bytes. >>> >> >> Did you create the database with the -E UNICODE option? If not, I >> think you might find that the data is being stored as 7 bit ascii. >> Caught me out too. :-) >> >> HTH >> > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly >