0

AImage from binary file

asked 2011-06-30 03:09:59 +0800

Neus gravatar image Neus
1415 14

Hi,
I'm getting an image from a data base and I want to show this image with zk's image component.
I'm getting a String that represents the image so I thought to do something like this:

String fichero = imagenbin.getFichero(); //the String that represents the image
AImage aimagen;
	try {
		aimagen = new AImage("",fichero.getBytes());
		img.setContent(aimagen);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

But I get several exceptions
This:
java.io.IOException: Unknown image format: 
	at org.zkoss.image.AImage.init(AImage.java:125)
	at org.zkoss.image.AImage.<init>(AImage.java:73)
	at org.sts.PruebaImagenbin.PruebaImagenbin.onCreate$img(PruebaImagenbin.java:72)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:87)
	at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192)
	at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
	at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:517)
	at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.sendEvent(EventProcessingThreadImpl.java:121)
	at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:319)
	at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:329)
	at org.zkoss.zk.ui.AbstractComponent$ForwardListener.onEvent(AbstractComponent.java:3042)
	at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192)
	at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
	at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:517)
	at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.run(EventProcessingThreadImpl.java:444)

or sometimes I get this:

sun.awt.image.ImageFormatException: Bogus marker length
	at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
	at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
	at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
	at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
	at sun.awt.image.ImageFetcher.run(Unknown Source)

Can anyone tell me what I'm doing wrong?

Thank you in advance!

delete flag offensive retag edit

12 Replies

Sort by ยป oldest newest

answered 2011-07-14 06:52:49 +0800

marcelodecampos gravatar image marcelodecampos
183

updated 2011-07-14 12:40:09 +0800

You can try this to upload anything:

 public static MediaDTO getMedia( org.zkoss.util.media.Media media ) throws IOException
    {
        MediaDTO dto = new MediaDTO();
        int mediaSize = 1;

        dto.setFormat( media.getFormat() );
        dto.setName( media.getName() );
        dto.setMimeType( media.getContentType() );
        if ( media.inMemory() ) {
            if ( media.isBinary() )
                dto.setObject( media.getByteData() );
            else
                dto.setObject( media.getStringData().getBytes( "UTF-8" ) );
        }
        else {
            if ( media.isBinary() ) {
                mediaSize = media.getStreamData().available();
                dto.setObject( new byte[ mediaSize ] );
                media.getStreamData().read( dto.getObject(), 0, mediaSize );
            }
            else {
                InputStreamReader is = ( InputStreamReader )media.getReaderData();
                StringBuffer strBuffer = new StringBuffer( 1024 * 64 );
                char[] chArray = new char[ 512 ];
                int nRead;
                do {
                    nRead = is.read( chArray );
                    if ( nRead > 0 ) {
                        strBuffer.append( chArray, 0, nRead );
                    }
                } while ( nRead > 0 );
                mediaSize = strBuffer.length();
                dto.setObject( strBuffer.toString().getBytes( "UTF-8" ) );
            }
        }
        return dto;
    }


the complete code is in http://www.zkoss.org/forum/listComment/16240-How-save-an-image-into-MYSQL

link publish delete flag offensive edit

answered 2011-07-14 20:40:53 +0800

dennis gravatar image dennis
3679 1 6
http://www.javaworld.com....

Nues,
I really don't like use base64 to store binary data as string to database, it multiply the data size and has decode effort
it is just a workaround only if you have noway to store binary.

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2011-06-30 03:09:59 +0800

Seen: 1,151 times

Last updated: Jul 14 '11

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More