Обсуждение: 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 >