В данной статье приводится пример реализации сохранения изображения в Blobstore-хранилище платформы Google App Engine не из HTML-формы, а из потока данных URL-адреса изображения.
Передаем в сервлет URL-адрес изображения как параметр и записываем в Blobstore-хранилище:
if(req.getParameter("urls")!=null){
FileService fileService = FileServiceFactory.getFileService();
String url=req.getParameter("urls");
if(!url.equals("")){
try{
URL u = new URL(url);
URLConnection uc=u.openConnection();
uc.setConnectTimeout(30000);
String type = uc.getContentType();
InputStream is=uc.getInputStream();
byte[] bytes = IOUtils.toByteArray(is);
is.close();
AppEngineFile file = fileService.createNewBlobFile(type);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
java.nio.ByteBuffer src=java.nio.ByteBuffer.wrap(bytes);
writeChannel.write(src);
String path = file.getFullPath();
writeChannel.closeFinally();
BlobKey blobKey = fileService.getBlobKey(file);
Entity UsersImage = new Entity("UsersImage");
UsersImage.setProperty("blobKey", blobKey);
UsersImage.setProperty("path", path);
UsersImage.setProperty("file_name", url);
datastore.put(UsersImage);
}catch(Exception e) {
resp.setContentType("text/xml;charset=utf-8");
resp.getWriter().println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
resp.getWriter().println("<response>");
resp.getWriter().println("<method>getException</method>");
resp.getWriter().println("<result>"+e.getMessage()+": Image do not load, check image and retry</result>");
resp.getWriter().println("</response>");
}
}
}