What are you trying to do? Jeff
On Thu, Mar 1, 2012 at 2:29 PM, Kayode Odeyemi <[email protected]> wrote: > 2012/3/1 Ronoaldo José de Lana Pereira <[email protected]> > >> Hello Odeyemi, >> >> If I got your problem right, yes, you can use the Files API to create an >> image blob, then use the ImageService to create a dedicated URL to serve >> that image as Jeff said. You can safely cache the generated URL, it will be >> available as long as you don't delete de blob. >> >> Double check that you called the closeFinally as documented here when >> creating the blob, and use the method >> getBlobKey<http://code.google.com/intl/en/appengine/docs/java/javadoc/com/google/appengine/api/files/FileService.html#getBlobKey%28com.google.appengine.api.files.AppEngineFile%29>from >> the Files api to get the blob key after you finalize your file. You >> can then use this to call the ImageService.getServingUrl(). This proccess >> works for both your unit tests and the local dev server. >> >> I think I implemented this just exactly the way you guys described it: > > Here's the code I'm working it: > > @RequestMapping(method=RequestMethod.POST) > public void handleFileRequest(HttpServletRequest request, > HttpServletResponse response) throws Exception { > Assert.notNull(request, "HttpServletRequest required"); > > // get the POST data > Map files = request.getParameterMap(); > Iterator iter = files.values().iterator(); > List<Object> gg = new ArrayList<Object>(); > while(iter.hasNext()) { > gg.add(iter.next()); > } > > log.log(Level.INFO, "Parameter values are {0}", > request.getParameter("qqfile")); > > InputStream stream = request.getInputStream(); > FileService fileService = FileServiceFactory.getFileService(); > AppEngineFile writableFile = null; > > for(Object s : gg) { > writableFile = fileService.createNewBlobFile(s.toString()); > } > //writableFile = > fileService.createNewBlobFile(request.getParameter("qqfile")); > > // Open a channel to write to it > boolean lock = false; > FileWriteChannel writeChannel = > fileService.openWriteChannel(writableFile, lock); > ByteBuffer buffer = ByteBuffer.allocateDirect(stream.available()); > lock = true; > writeChannel = fileService.openWriteChannel(writableFile, lock); > writeChannel.write(buffer); > writeChannel.closeFinally(); > > // get the created files path and pass to PrintWriter > // Now read from the file using the Blobstore API > BlobKey blobKey = fileService.getBlobKey(writableFile); > BlobstoreService blobStoreService = > BlobstoreServiceFactory.getBlobstoreService(); > > // MAX_BLOB_FETCH_SIZE = 1015808 > String segment = new String(blobStoreService.fetchData(blobKey, > 30, 1024)); > > ImagesService imagesService = > ImagesServiceFactory.getImagesService(); > String imageUrl = imagesService.getServingUrl(blobKey); > log.log(Level.INFO, "Imgae url is {0}", imageUrl); > > response.setContentType("application/json; charset=UTF-8"); > PrintWriter out = response.getWriter(); > out.write("{\"result1\" : " + '\"' + writableFile.getFullPath() + > '\"' + "}"); > > When the file was sent, it wasn't sent with the full path to the file. I > only got the filename + extension. Something like: file-name.jpg. So I just > simply used that to create the new blob file. > > Perhaps I might be doing something wrong. I stand to be corrected. > > Thanks > >> >> Em quinta-feira, 1 de março de 2012 14h19min41s UTC-3, drecute escreveu: >> >>> On Thu, Mar 1, 2012 at 3:03 PM, Jeff Schnitzer <[email protected]>wrote: >>> >>>> Look at the documentation for the images service. There is a method >>>> that gives you a serving url directly to the CDN. >>>> >>>> Warning: This method has a surprising amount of latency, you probably >>>> want to cache the value in memcache for a reasonable duration. >>>> >>>> Can the Image Service work with the filesystem where the blob is >>> stored? Everytime I try to retrieve it using the method you mentioned >>> getServingUrl(blobkey), I get the error: >>> >>> [java] java.lang.**IllegalArgumentException: Failed to read image >>> [java] at com.google.appengine.api.**images.ImagesServiceImpl.** >>> getServingUrl(**ImagesServiceImpl.java:222) >>> >>> Also, I'm think this action is not possible on the dev server. >>> >>>> >>>> On Thu, Mar 1, 2012 at 7:42 AM, Kayode Odeyemi <[email protected]>wrote: >>>> >>>>> Hi everyone, >>>>> >>>>> I have images uploaded to the blobstore using filesystem API. The >>>>> files have been uploaded successfully and I can see the blobs in the >>>>> respective directory. >>>>> >>>>> But then, how do I decode these files such that when sent back to the >>>>> client or retrieved using the blobstore API, I'm able to get an image? >>>>> Right now /blobstore/writable:xxx is not useful for me because when I wrap >>>>> the path in <img src="/blobstore/writable:xxx" />, it doesn't give me an >>>>> image. >>>>> >>>>> Any help is appreciated. >>>>> >>>>> Thanks >>>>> >>>>> >>>>> -- >>>>> Odeyemi 'Kayode O. >>>>> http://ng.linkedin.com/in/**kayodeodeyemi<http://ng.linkedin.com/in/kayodeodeyemi>. >>>>> t: @charyorde blog: >>>>> http://sinati.com/tree/java-**cheat-sheet<http://sinati.com/tree/java-cheat-sheet> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Google App Engine" group. >>>>> To post to this group, send email to google-appengine@googlegroups.** >>>>> com <[email protected]>. >>>>> To unsubscribe from this group, send email to >>>>> google-appengine+unsubscribe@**googlegroups.com<google-appengine%[email protected]> >>>>> . >>>>> For more options, visit this group at http://groups.google.com/** >>>>> group/google-appengine?hl=en<http://groups.google.com/group/google-appengine?hl=en> >>>>> . >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Google App Engine" group. >>>> To post to this group, send email to google-appengine@googlegroups.** >>>> com <[email protected]>. >>>> To unsubscribe from this group, send email to >>>> google-appengine+unsubscribe@**googlegroups.com<google-appengine%[email protected]> >>>> . >>>> For more options, visit this group at http://groups.google.com/** >>>> group/google-appengine?hl=en<http://groups.google.com/group/google-appengine?hl=en> >>>> . >>>> >>> >>> >>> >>> -- >>> Odeyemi 'Kayode O. >>> http://ng.linkedin.com/in/**kayodeodeyemi<http://ng.linkedin.com/in/kayodeodeyemi>. >>> t: @charyorde blog: >>> http://sinati.com/tree/java-**cheat-sheet<http://sinati.com/tree/java-cheat-sheet> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/google-appengine/-/uX0cs5hKeoEJ. >> >> 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?hl=en. >> > > > > -- > Odeyemi 'Kayode O. > http://ng.linkedin.com/in/kayodeodeyemi. t: @charyorde blog: > http://sinati.com/tree/java-cheat-sheet > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" 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?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google App Engine" 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?hl=en.
