I keep getting this error reading data from the blob. 

   [ERROR] createTiles(): Error: java.lang.IllegalArgumentException: 
corruptJPEG 
format

  java.lang.IllegalArgumentException: corrupt JPEG format

    
atcom.google.appengine.api.images.ImageImpl.updateJpegDimensions(ImageImpl.java
:261)

    atcom.google.appengine.api.images.ImageImpl.updateDimensions(ImageImpl.java
:146)

    at com.google.appengine.api.images.ImageImpl.getWidth(ImageImpl.java:55)

    
atorg.gonevertical.core.server.service.image.Ga_Service_Image.createTiles(Ga_Service_Image.java
:250)

    
atorg.gonevertical.core.server.service.image.Ga_Service_Image.tileImage(Ga_Service_Image.java
:240)

    
atorg.gonevertical.core.server.service.image.Ga_Service_Image.tile(Ga_Service_Image.java
:229)

    
atorg.gonevertical.core.server.service.image.Ga_Service_Image.transform(Ga_Service_Image.java
:174)

    
atorg.gonevertical.core.server.servlet.Servlet_Task.startTransform(Servlet_Task.java
:127)

    atorg.gonevertical.core.server.servlet.Servlet_Task.doGet(Servlet_Task.java
:84)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)

    
atorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java
:1166)

    
atcom.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java
:58)

    
atorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java
:1157)

    
atcom.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java
:43)

    
atorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java
:1157)

    
atcom.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java
:122)

    
atorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java
:1157)

    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
388)

    atorg.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java
:216)

    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)

    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)

    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)

    
atcom.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java
:70)

    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)

    
atcom.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java
:351)

    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)

    at org.mortbay.jetty.Server.handle(Server.java:326)

    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)

    
atorg.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java
:923)

    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)

    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)

    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)

    atorg.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java
:409)

    atorg.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java
:582)



This is how I am reading the image bytes:

    private byte[] getImageBytes(BlobData blobData) {

    if (blobData == null) {

      return null;

    }

  

    BlobKey blobKey = new BlobKey(blobData.getKey());

    if (blobKey == null) {

      return null;

    }

   

    int chunkSize = 1024;

    long startIndex = 0;

    long endIndex = chunkSize;

    long filesize = blobData.getSize();

    boolean theend = false;

    ByteArrayOutputStream out = new ByteArrayOutputStream();

    while (theend == false) {

      if (endIndex == filesize) {

        theend = true;

      }

      

      System.out.println("startIndex=" + startIndex + " endIndex=" + 
endIndex);

      

      byte[] b = blobstoreService.fetchData(blobKey, startIndex, endIndex);

      try {

        out.write(b);

      } catch (IOException e) {

        e.printStackTrace();

      }

      

      startIndex = startIndex + chunkSize;

      endIndex = endIndex + chunkSize;

      if (endIndex >filesize) {

        endIndex = filesize;

      }

    } 

    

    byte[] filebytes = out.toByteArray();

    

    return filebytes;

  }

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to