Google App Engine上传和显示图片
2012-09-23 13:54
405 查看
实现功能:
1. 通过Web界面上传本地图片文件到GAE的Blobstore;
2. 通过GAE自动生成的URL访问图片;
3. 手动提供图片访问服务;
代码:
上传页面(hello.jsp)
Upload.java
Server.java
web.xml
与想象中的不同,访问存储在Blobstor中图像数据时,不能通过如下方法直接获取数据
这样获取到的数据为空,非常奇怪的一个问题。
最终,我们可以通过web页面上传图像之后,通过:your_url/type=showImage 来访问上传的图像。
1. 通过Web界面上传本地图片文件到GAE的Blobstore;
2. 通过GAE自动生成的URL访问图片;
3. 手动提供图片访问服务;
代码:
上传页面(hello.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %> <%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %> <% BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); %> <html> <head> <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" /> </head> <body> <h1>ImageUpload</h1> <h2>New</h2> <form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data"> <input type="file" name="myFile"> <input type="submit" value="Submit"> </form> </body> </html>
Upload.java
package gaeimage; import java.io.IOException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.blobstore.BlobKey; import com.google.appengine.api.blobstore.BlobstoreService; import com.google.appengine.api.blobstore.BlobstoreServiceFactory; public class Upload extends HttpServlet { private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req); BlobKey blobKey = blobs.get("myFile"); if (blobKey == null) { res.sendRedirect("/"); } else { res.sendRedirect("/server?blob-key=" + blobKey.getKeyString()); System.out.println(blobKey.getKeyString()); } } }
Server.java
package gaeimage; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.blobstore.BlobInfo; import com.google.appengine.api.blobstore.BlobInfoFactory; import com.google.appengine.api.blobstore.BlobKey; import com.google.appengine.api.blobstore.BlobstoreService; import com.google.appengine.api.blobstore.BlobstoreServiceFactory; import com.google.appengine.api.images.Image; import com.google.appengine.api.images.ImagesService; import com.google.appengine.api.images.ImagesServiceFactory; import com.google.appengine.api.images.Transform; public class Server extends HttpServlet { BlobKey blobKey; private ImagesService imagesService = ImagesServiceFactory.getImagesService(); private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String type=req.getParameter("type"); if (type == null) { blobKey = new BlobKey(req.getParameter("blob-key")); String imageUrl = imagesService.getServingUrl(blobKey); System.out.println(imageUrl); } else if (type.equalsIgnoreCase("showImage")) { BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey); byte[] imageData = blobstoreService.fetchData(blobKey, 0, blobInfo.getSize()); res.setContentType("image/jpeg"); res.getOutputStream().write(imageData); } } }
web.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- Servlets --> <servlet> <servlet-name>Upload</servlet-name> <servlet-class>gaeimage.Upload</servlet-class> </servlet> <servlet> <servlet-name>Server</servlet-name> <servlet-class>gaeimage.Server</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Server</servlet-name> <url-pattern>/server</url-pattern> </servlet-mapping> <!-- Default page to serve --> <welcome-file-list> <welcome-file>hello.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>SystemServiceServlet</servlet-name> <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> <init-param> <param-name>services</param-name> <param-value/> </init-param> </servlet> <servlet-mapping> <servlet-name>SystemServiceServlet</servlet-name> <url-pattern>/_ah/spi/*</url-pattern> </servlet-mapping> </web-app>
与想象中的不同,访问存储在Blobstor中图像数据时,不能通过如下方法直接获取数据
ImagesService imagesService = ImagesServiceFactory.getImagesService(); Image image = ImagesServiceFactory.makeImageFromBlob(blobKey); byte[] imageData = image.getImageData();
这样获取到的数据为空,非常奇怪的一个问题。
最终,我们可以通过web页面上传图像之后,通过:your_url/type=showImage 来访问上传的图像。
相关文章推荐
- Google appengine中文乱码问题 和图片显示问题
- eclipse下安装pydev,google app engine 插件无法显示设置的问题
- 闭关纪要18.将包含中文的数据上传到Google app engine
- 向Google App Engine上传数据的几个心得(下)
- android app开发中将表情图片上传到服务器并获取显示
- google app engine上传程序
- google appengine上传错误
- 通过代理上传Google App Engine 应用
- com.google.appengine.api.datastore.Text用法及解决无法显示Text字段
- 向Google App Engine上传数据的几个心得(上)
- [置顶] 【微信平台】艺萌管家APP技术总结(三)——上传和显示图片
- 使用Google App Engine将自己的IP所在地显示为Google~
- 分享D瓜哥最近攒的资料(架构方面)、架构分析与设计、知名网站架构分析:Amazon网站架构学习总结、探索Google App Engine背后的奥秘、Facebook图片存储架构、优酷网架构、YouTube架构
- Google App Engine 添加JSP文件后上传报JDK错误的解决办法
- google-app-engine 上传下载 用户文件
- 基于Google App Engine和Django的Hello World
- jsp页面上传图片之后页面,当前页面的显示上传的图片可以自行更新
- Google App Engine
- ueditor 编辑器,自定义图片上传及图片显示
- 将多个图片上传,并在另外的页面显示