Java 在GWT中,给定blobstore键的字符串版本,如何显示appengine服务器中的图像
在GWT中,给定密钥的字符串版本,如何显示appengine服务器端blobstore中的图像 我想我已经在appengine上存储了一个图像作为一个blob。有人能告诉我这是否正确吗Java 在GWT中,给定blobstore键的字符串版本,如何显示appengine服务器中的图像,java,google-app-engine,gwt,servlets,httpresponse,Java,Google App Engine,Gwt,Servlets,Httpresponse,在GWT中,给定密钥的字符串版本,如何显示appengine服务器端blobstore中的图像 我想我已经在appengine上存储了一个图像作为一个blob。有人能告诉我这是否正确吗 try { FileService fileService = FileServiceFactory.getFileService();
try
{
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(content_type, fileName);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
byte[] b1 = new byte[BUFFER_SIZE];
int readBytes1;
while ((readBytes1 = is.read(b1)) != -1)
{
writeChannel.write(ByteBuffer.wrap(b1, 0, readBytes1));
}
writeChannel.closeFinally();
item_image_blob_key = fileService.getBlobKey(file).getKeyString();
}
catch (Exception e)
{
System.out.println(e.getLocalizedMessage());
e.printStackTrace(response.getWriter());
}
我将密钥发送回客户,并尝试呈现图像。我尝试使用:
ImagesService imagesService = ImagesServiceFactory
.getImagesService();
// Get the image serving URL
String imageUrl = imagesService.getServingUrl(blobKey);
但它已被弃用,因此我尝试:
ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions suo = ServingUrlOptions.Builder.withBlobKey(blobKey);
String image_url = imagesService.getServingUrl(suo);
item.setProperty("image_url", image_url);
现在我得到了一个如下所示的URL:
http://0.0.0.0:8888/_ah/img/5nXYgHwfiMmblDFldDXSew
并在客户端上创建一个映像,因此:
String image_url = result.get_image_url();
System.out.println("image url is: " + image_url);
Image image = new Image();
image.setUrl(image_url);
RootPanel.get("dynamicDate").add(image);
UI上仅显示默认图像图标
因此,我创建了一个访问blobstore的servlet,如下所示:
import java.io.IOException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse
导入com.google.appengine.api.blobstore.BlobKey;
导入com.google.appengine.api.blobstore.BlobstoreService;
导入com.google.appengine.api.blobstore.BlobstoreServiceFactory
公共类ImageServlet扩展了HttpServlet
{
私有静态最终长serialVersionUID=1L
@凌驾
public void doGet(HttpServletRequest-req、HttpServletResponse-res)抛出IOException
{
字符串blob_key=req.getParameter(“blob key”)
}
}
和客户端http请求:
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, "/itemmanager/image");
try
{
Request request = requestBuilder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception)
{
System.out.println(exception.getMessage());
}
public void onResponseReceived(Request request, Response response)
{
System.out.println("so far so good");
System.out.println(response.getHeadersAsString());
if (200 == response.getStatusCode())
{
}
else
{
// Handle the error. Can get the status text from response.getStatusText()
}
}
});
} catch (RequestException e) {
// Couldn't connect to server
}
我似乎收到了一些文本,我如何获得输入流或其他我可以获得图像的东西?经过两天的搜索Google和stack overflow并尝试,我终于得到了它 在服务器上,我获得了上载url,因此:
ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions suo = ServingUrlOptions.Builder.withBlobKey(blobKey);
String image_url = imagesService.getServingUrl(suo);
item.setProperty("image_url", image_url);
appengine API生成的url在本地模式下不起作用[我认为这与sop跨平台问题有关]
http://0.0.0.0:8888/_ah/img/mR9SOTSEizec4gZYsRnuEw
但它提供了一个线索:即字符串的/_ah/img/部分
因此,我决定尝试一下,并将此URL提供给图像“/\u ah/img/mr9sotec4gzysruw”
这是客户端代码
String imageKey = result.get_image_key();
System.out.println("category is: " + result.get_category() + " image blob key is: " + imageKey);
String image_url = result.get_image_url();
System.out.println("image url is: " + image_url);
//This doesn't work at least locally
/*Image image = new Image();
image.setUrl(image_url);
RootPanel.get("dynamicDate").add(image);*/
Image image2 = new Image();
image2.setUrl("/_ah/img/" + imageKey);
RootPanel.get("dynamicDate").add(image2);
String imageKey = result.get_image_key();
System.out.println("category is: " + result.get_category() + " image blob key is: " + imageKey);
String image_url = result.get_image_url();
System.out.println("image url is: " + image_url);
//This doesn't work at least locally
/*Image image = new Image();
image.setUrl(image_url);
RootPanel.get("dynamicDate").add(image);*/
Image image2 = new Image();
image2.setUrl("/_ah/img/" + imageKey);
RootPanel.get("dynamicDate").add(image2);