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. }

      你可能感兴趣的:(java,apache,jsp,Google,GAE)