Advertisement
sombriks

MediaServlet.java

Oct 19th, 2015
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 3.79 KB | None | 0 0
  1. package br.com.roundabout;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.sql.Connection;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.Statement;
  9. import java.util.Collection;
  10. import java.util.logging.Logger;
  11.  
  12. import javax.annotation.Resource;
  13. import javax.servlet.ServletException;
  14. import javax.servlet.annotation.MultipartConfig;
  15. import javax.servlet.annotation.WebServlet;
  16. import javax.servlet.http.HttpServlet;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import javax.servlet.http.Part;
  20. import javax.sql.DataSource;
  21.  
  22. import org.apache.commons.io.IOUtils;
  23.  
  24. @MultipartConfig
  25. @WebServlet(name = "MediaServlet", urlPatterns = { "/media/*", "/media" })
  26. public class MediaServlet extends HttpServlet {
  27.     private static final long serialVersionUID = 135634534L;
  28.  
  29.     private static final Logger LOG = Logger.getAnonymousLogger();
  30.  
  31.     @Resource(name = "jdbc/media-ds")
  32.     private DataSource ds;
  33.  
  34.     private void cors(HttpServletResponse res) {
  35.         res.addHeader("Access-Control-Allow-Methods",
  36.                 "PUT, GET, POST, DELETE, OPTIONS");
  37.         res.addHeader("Access-Control-Expose-Headers", "ItsDangerousToGoAlone");
  38.         res.addHeader("Access-Control-Allow-Headers",
  39.                 "Content-Type, ItsDangerousToGoAlone");
  40.         res.addHeader("Access-Control-Allow-Origin", "*");
  41.     }
  42.  
  43.     protected void doGet(HttpServletRequest request,
  44.             HttpServletResponse response) throws ServletException, IOException {
  45.         String path = request.getPathInfo().replace("/", "");
  46.         LOG.info("GET " + path);
  47.         System.out.println(path);
  48.         try (Connection con = ds.getConnection()) {
  49.             String q = "select mediamime,mediadata from media where mediaid = ?";
  50.             try (PreparedStatement ps = con.prepareStatement(q)) {
  51.                 int mediaid = Integer.parseInt(path);
  52.                 ps.setInt(1, mediaid);
  53.                 try (ResultSet rs = ps.executeQuery()) {
  54.                     if (rs.next()) {
  55.                         String mime = rs.getString("mediamime");
  56.                         response.setContentType(mime);
  57.                         try (InputStream in = rs.getBinaryStream("mediadata")) {
  58.                             IOUtils.copy(in, response.getOutputStream());
  59.                         }
  60.                     }
  61.                 }
  62.             }
  63.         } catch (Exception e) {
  64.             LOG.severe(e.getMessage());
  65.             e.printStackTrace();
  66.             response.setStatus(500);
  67.             response.getWriter().write(e.toString());
  68.         }
  69.     }
  70.  
  71.     @Override
  72.     protected void doOptions(HttpServletRequest req, HttpServletResponse res)
  73.             throws ServletException, IOException {
  74.         cors(res);
  75.         LOG.info("called OPTIONS");
  76.         res.getWriter().write("GET,POST");
  77.     }
  78.  
  79.     protected void doPost(HttpServletRequest request,
  80.             HttpServletResponse response) throws ServletException, IOException {
  81.         cors(response);
  82.         LOG.info("POST started: " + request.getContentType());
  83.         Collection<Part> parts = request.getParts();
  84.         for (Part part : parts) {
  85.             long len = part.getSize();
  86.             String name = part.getName();
  87.             LOG.info("attepmt to upload " + name + " from "
  88.                     + request.getRemoteAddr());
  89.             if ("file".equals(name)) {
  90.                 String mime = part.getContentType();
  91.                 try (InputStream in = part.getInputStream()) {
  92.                     String q = "insert into media (mediamime,mediadata) values (?,?)";
  93.                     try (Connection con = ds.getConnection()) {
  94.                         try (PreparedStatement ps = //
  95.                         con.prepareStatement(q, Statement.RETURN_GENERATED_KEYS)) {
  96.                             ps.setString(1, mime);
  97.                             ps.setBinaryStream(2, in, len);
  98.                             ps.executeUpdate();
  99.                             try (ResultSet rs = ps.getGeneratedKeys()) {
  100.                                 if (rs.next()){
  101.                                     String m = ""+rs.getInt(1);
  102.                                     LOG.info("new media: "+m);
  103.                                     response.getWriter().write(m);
  104.                                 }
  105.                             }
  106.                         }
  107.                     } catch (Exception e) {
  108.                         LOG.severe(e.getMessage());
  109.                         e.printStackTrace();
  110.                         response.setStatus(500);
  111.                         response.getWriter().write(e.toString());
  112.                     }
  113.                 }
  114.             }
  115.         }
  116.     }
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement