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
- public class PhotoDao {
- private static PhotoDao _instance = null;
- public static PhotoDao getInstance() {
- if (_instance == null) {
- _instance = new PhotoDao();
- }
- return _instance;
- }
- //
- public String insertPhoto(Photo photo) {
- PersistenceManager pm = PMF.get().getPersistenceManager();
- try {
- pm.makePersistent(photo);
- } finally {
- pm.close();
- }
- return photo.getId().toString();
- }
- }
- public Photo getById(Long id) {
- PersistenceManager pm = PMF.get().getPersistenceManager();
- Query query = pm.newQuery(Photo.class);
- query.setFilter("id == idParam");
- query.declareParameters("Long idParam");
- List photo = null;
- try {
- photo = (List) query.execute(id);
- if (photo.isEmpty()){
- return null;
- }else{
- return photo.get(0);
- }
- } finally {
- query.closeAll();
- }
- }
The PhotoServlet, I used Apache Commons FileUpload: commons-fileupload.
PhotoServlet.java
- import org.apache.commons.fileupload.FileItemIterator;
- import org.apache.commons.fileupload.FileItemStream;
- import org.apache.commons.fileupload.FileUploadException;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.apache.commons.io.IOUtils;
- public class PhotoServlet extends HttpServlet {
- /*display image*/
- public void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws IOException {
- String id = req.getParameter("id");
- Photo photo = PhotoDao.getInstance().getById(Long.parseLong(id));
- Blob b = photo.getPhoto();
- resp.setContentType("image/jpeg;charset=utf-8");
- resp.getOutputStream().write(b.getBytes());
- resp.getOutputStream().close();
- }
- /*upload image and add to datastore*/
- public void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws IOException {
- ServletFileUpload upload = new ServletFileUpload();
- FileItemIterator iterator = null;
- try {
- iterator = upload.getItemIterator(req);
- } catch (FileUploadException e) {
- e.printStackTrace();
- }
- try {
- while (iterator.hasNext()) {
- FileItemStream item = iterator.next();
- InputStream stream = item.openStream();
- if (item.isFormField()) {
- // Handle form field
- } else {
- Blob bImg = new Blob(IOUtils.toByteArray(stream));
- Photo photo = new Photo(bImg);
- String pid = PhotoDao.getInstance().insertPhoto(photo);
- req.setAttribute("Pid", pid);
- try {
- req.getRequestDispatcher("photo.jsp").forward(req, resp);
- } catch (ServletException e) {
- e.printStackTrace();
- }
- }
- }
- } catch (FileUploadException e) {
- e.printStackTrace();
- }
- }
- }