T.M. SoftStudio

feci quod potui, faciant meliora potentes

Google App Engine: Запись изображения в хранилище Blobstore по URL-адресу

 

В данной статье приводится пример реализации сохранения изображения в Blobstore-хранилище платформы Google App Engine не из HTML-формы, а из потока данных URL-адреса изображения.

К сожалению в настоящее время программный интерфейс File API исключен из обращения и заменен на платное использование Google Cloud Storage

Передаем в сервлет 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>");

}

}

}