Обсуждение: blobs in a client/server environment

Поиск
Список
Период
Сортировка

blobs in a client/server environment

От
Matt Fair
Дата:
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




Re: blobs in a client/server environment

От
Pete Jewell
Дата:
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.

Re: blobs in a client/server environment

От
Matt Fair
Дата:
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
>




Re: blobs in a client/server environment

От
Matt Fair
Дата:
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
>