JSP/Servlet Dosya Upload Etmek
JSP ve Servlet ile dosya upload etmek için OReilly’s COS kütüphanesi kullanılabilir.
1. İlk önce cos kütüphanesini projemize eklememiz gerekiyor. Netbeans de projenize sağ tıklayıp “Properties” altındaki “libraries” kategorisinden kütüphaneyi ekleyebilirsiniz.
2. Dosya upload etmek için jsp dosyamıza “file” türünden bir input içeren form ekliyoruz.
1 2 3 | <form action="Upload" enctype="multipart/form-data" method="post"> <input name="uploaded" type="file" /> <input name="save" type="submit" value="Upload" /> </form> |
3. Servlet e gelen request i MultipartRequest e cast etmemiz gerekmektedir. Bunun için processRequest fonksiyonunu aşağıdaki şekilde oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); System.out.println("upload servlet"); try { /** * Parse request using MultiparRequest since it is a multipart/form-data * throws IOException if request is not multipart * * So, if form is not yet submitted Upload servlet will show upload.jsp as response * if form is submitted Upload servlet will process the request at upload() function */ MultipartRequest multipartRequest = new MultipartRequest(request, getServletContext().getRealPath("/"), /* 1MB */ 1024 * 1024, new DefaultFileRenamePolicy()); if (multipartRequest.getParameter("save") != null) { upload(request, response, multipartRequest); } else { throw new IOException("Display Upload Dialogue"); } } catch (IOException ex) { displayUpload(request, response); } } |
4. upload ve displayUpload fonksiyonlarını aşağıdaki şekilde tanımlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | private void upload(HttpServletRequest request, HttpServletResponse response, MultipartRequest multipartRequest) throws IOException { /** * Get uploaded file */ File tmpFile = multipartRequest.getFile("uploaded"); /** * Move temporary file to actual destination */ File dirToMove = new File(getServletContext().getRealPath("/")); String newFileName = "uploaded" + tmpFile.getName().substring(tmpFile.getName().lastIndexOf('.')); File fileToMove = new File(dirToMove, newFileName); tmpFile.renameTo(fileToMove); tmpFile.delete(); response.sendRedirect("uploaded.jsp"); } |
1 2 3 4 | private void displayUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { getServletContext().getRequestDispatcher("/WEB-INF/jspf/upload.jsp").forward(request, response); } |
5. Yukardaki fonksiyonlar basit bir upload işlemini yapacaktır. Daha ayrıntılı bilgi için O’Reily’s COS’s javadocs unu incelemek faydalı olacaktır.