FileUpload google app engine java(图片上传实例demo)

GAE Java 上传(图片)文件到datastore,这个实例(demo)是上传图片到gae datastore,然后从gae datastore中取得图片文件流显示图片文件。上传用到了 Apache Commons FileUpload。直接上代码。

 

Photo.java

   1.  public class Photo {
   2.  
   3.     @PrimaryKey
   4.     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   5.     private Long id;
   6.     
   7.     @Persistent
   8.     private Blob photo;
   9.  
  10.     ...Set&Get...
  11. }
 

PhotoDao.java

  1. public class PhotoDao {
  2.     private static PhotoDao _instance = null;
  3.  
  4.     public static PhotoDao getInstance() {
  5.         if (_instance == null) {
  6.             _instance = new PhotoDao();
  7.         }
  8.         return _instance;
  9.     }
  10.  
  11.     //
  12.     public String insertPhoto(Photo photo) {
  13.         PersistenceManager pm = PMF.get().getPersistenceManager();
  14.         try {
  15.             pm.makePersistent(photo);
  16.         } finally {
  17.             pm.close();
  18.         }
  19.         return photo.getId().toString();
  20.     }
  21. }
  22.  
  23.     public Photo getById(Long id) {
  24.         PersistenceManager pm = PMF.get().getPersistenceManager();
  25.         Query query = pm.newQuery(Photo.class);
  26.         query.setFilter("id == idParam");
  27.         query.declareParameters("Long idParam");
  28.         List photo = null;
  29.         try {
  30.             photo = (List) query.execute(id);
  31.             if (photo.isEmpty()){
  32.                 return null;
  33.             }else{
  34.                 return photo.get(0);
  35.             }
  36.            
  37.         } finally {
  38.             query.closeAll();
  39.         }
  40.     }

The PhotoServlet, I used Apache Commons FileUpload: commons-fileupload.

PhotoServlet.java

  1. import org.apache.commons.fileupload.FileItemIterator;
  2. import org.apache.commons.fileupload.FileItemStream;
  3. import org.apache.commons.fileupload.FileUploadException;
  4. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  5. import org.apache.commons.io.IOUtils;
  6.  
  7. public class PhotoServlet extends HttpServlet {
  8.     /*display image*/
  9.     public void doGet(HttpServletRequest req, HttpServletResponse resp)
  10.             throws IOException {
  11.         String id = req.getParameter("id");
  12.         Photo photo = PhotoDao.getInstance().getById(Long.parseLong(id));
  13.         Blob b = photo.getPhoto();
  14.         resp.setContentType("image/jpeg;charset=utf-8");
  15.         resp.getOutputStream().write(b.getBytes());
  16.         resp.getOutputStream().close();
  17.     }
  18.     /*upload image and add to datastore*/
  19.     public void doPost(HttpServletRequest req, HttpServletResponse resp)
  20.             throws IOException {
  21.         ServletFileUpload upload = new ServletFileUpload();
  22.         FileItemIterator iterator = null;
  23.         try {
  24.             iterator = upload.getItemIterator(req);
  25.         } catch (FileUploadException e) {
  26.             e.printStackTrace();
  27.         }
  28.         try {
  29.             while (iterator.hasNext()) {
  30.                 FileItemStream item = iterator.next();
  31.                 InputStream stream = item.openStream();
  32.                 if (item.isFormField()) {
  33.                     // Handle form field
  34.                 } else {
  35.                     Blob bImg = new Blob(IOUtils.toByteArray(stream));
  36.                     Photo photo = new Photo(bImg);
  37.                     String pid = PhotoDao.getInstance().insertPhoto(photo);
  38.                     req.setAttribute("Pid", pid);
  39.                 try {
  40.                     req.getRequestDispatcher("photo.jsp").forward(req, resp);
  41.                 } catch (ServletException e) {
  42.                     e.printStackTrace();
  43.                     }
  44.                 }
  45.  
  46.             }
  47.         } catch (FileUploadException e) {
  48.             e.printStackTrace();
  49.         }
  50.  
  51.     }
  52.  
  53. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值