1. 通过getInputStream()取得上传文件。
002 | * To change this template, choose Tools | Templates |
003 | * and open the template in the editor. |
005 | package net.individuals.web.servlet; |
007 | import java.io.DataInputStream; |
008 | import java.io.FileOutputStream; |
009 | import java.io.IOException; |
010 | import javax.servlet.ServletException; |
011 | import javax.servlet.annotation.WebServlet; |
012 | import javax.servlet.http.HttpServlet; |
013 | import javax.servlet.http.HttpServletRequest; |
014 | import javax.servlet.http.HttpServletResponse; |
020 | @WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
021 | public class UploadServlet extends HttpServlet { |
024 | * Processes requests for both HTTP |
025 | * <code>GET</code> and |
026 | * <code>POST</code> methods. |
028 | * @param request servlet request |
029 | * @param response servlet response |
030 | * @throws ServletException if a servlet-specific error occurs |
031 | * @throws IOException if an I/O error occurs |
033 | protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
034 | throws ServletException, IOException { |
035 | response.setContentType( "text/html;charset=UTF-8" ); |
037 | byte [] body = readBody(request); |
039 | String textBody = new String(body, "ISO-8859-1" ); |
041 | String fileName = getFileName(textBody); |
043 | Position p = getFilePosition(request, textBody); |
045 | writeTo(fileName, body, p); |
054 | public Position( int begin, int end) { |
060 | private byte [] readBody(HttpServletRequest request) throws IOException { |
062 | int formDataLength = request.getContentLength(); |
064 | DataInputStream dataStream = new DataInputStream(request.getInputStream()); |
065 | byte body[] = new byte [formDataLength]; |
067 | while (totalBytes < formDataLength) { |
068 | int bytes = dataStream.read(body, totalBytes, formDataLength); |
074 | private Position getFilePosition(HttpServletRequest request, String textBody) throws IOException { |
076 | String contentType = request.getContentType(); |
077 | String boundaryText = contentType.substring(contentType.lastIndexOf( "=" ) + 1 , contentType.length()); |
079 | int pos = textBody.indexOf( "filename=\"" ); |
080 | pos = textBody.indexOf( "\n" , pos) + 1 ; |
081 | pos = textBody.indexOf( "\n" , pos) + 1 ; |
082 | pos = textBody.indexOf( "\n" , pos) + 1 ; |
083 | int boundaryLoc = textBody.indexOf(boundaryText, pos) - 4 ; |
084 | int begin = ((textBody.substring( 0 , pos)).getBytes( "ISO-8859-1" )).length; |
085 | int end = ((textBody.substring( 0 , boundaryLoc)).getBytes( "ISO-8859-1" )).length; |
087 | return new Position(begin, end); |
090 | private String getFileName(String requestBody) { |
091 | String fileName = requestBody.substring(requestBody.indexOf( "filename=\"" ) + 10 ); |
092 | fileName = fileName.substring( 0 , fileName.indexOf( "\n" )); |
093 | fileName = fileName.substring(fileName.indexOf( "\n" ) + 1 , fileName.indexOf( "\"" )); |
098 | private void writeTo(String fileName, byte [] body, Position p) throws IOException { |
099 | FileOutputStream fileOutputStream = new FileOutputStream( "e:/workspace/" + fileName); |
100 | fileOutputStream.write(body, p.begin, (p.end - p.begin)); |
101 | fileOutputStream.flush(); |
102 | fileOutputStream.close(); |
108 | * <code>GET</code> method. |
110 | * @param request servlet request |
111 | * @param response servlet response |
112 | * @throws ServletException if a servlet-specific error occurs |
113 | * @throws IOException if an I/O error occurs |
116 | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
117 | throws ServletException, IOException { |
118 | processRequest(request, response); |
123 | * <code>POST</code> method. |
125 | * @param request servlet request |
126 | * @param response servlet response |
127 | * @throws ServletException if a servlet-specific error occurs |
128 | * @throws IOException if an I/O error occurs |
131 | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
132 | throws ServletException, IOException { |
133 | processRequest(request, response); |
137 | * Returns a short description of the servlet. |
139 | * @return a String containing servlet description |
142 | public String getServletInfo() { |
143 | return "Short description" ; |
2. 通过getPart()、getParts()取得上传文件。
002 | * To change this template, choose Tools | Templates |
003 | * and open the template in the editor. |
005 | package net.individuals.web.servlet; |
007 | import java.io.FileNotFoundException; |
008 | import java.io.FileOutputStream; |
009 | import java.io.IOException; |
010 | import java.io.InputStream; |
011 | import java.io.OutputStream; |
012 | import javax.servlet.ServletException; |
013 | import javax.servlet.annotation.MultipartConfig; |
014 | import javax.servlet.annotation.WebServlet; |
015 | import javax.servlet.http.HttpServlet; |
016 | import javax.servlet.http.HttpServletRequest; |
017 | import javax.servlet.http.HttpServletResponse; |
018 | import javax.servlet.http.Part; |
025 | @WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
026 | public class UploadServlet extends HttpServlet { |
029 | * Processes requests for both HTTP |
030 | * <code>GET</code> and |
031 | * <code>POST</code> methods. |
033 | * @param request servlet request |
034 | * @param response servlet response |
035 | * @throws ServletException if a servlet-specific error occurs |
036 | * @throws IOException if an I/O error occurs |
038 | protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
039 | throws ServletException, IOException { |
040 | Part part = request.getPart( "photo" ); |
041 | String fileName = getFileName(part); |
042 | writeTo(fileName, part); |
046 | private String getFileName(Part part) { |
047 | String header = part.getHeader( "Content-Disposition" ); |
048 | String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
054 | private void writeTo(String fileName, Part part) throws IOException, FileNotFoundException { |
055 | InputStream in = part.getInputStream(); |
056 | OutputStream out = new FileOutputStream( "e:/workspace/" + fileName); |
057 | byte [] buffer = new byte [ 1024 ]; |
059 | while ((length = in.read(buffer)) != - 1 ) { |
060 | out.write(buffer, 0 , length); |
070 | * <code>GET</code> method. |
072 | * @param request servlet request |
073 | * @param response servlet response |
074 | * @throws ServletException if a servlet-specific error occurs |
075 | * @throws IOException if an I/O error occurs |
078 | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
079 | throws ServletException, IOException { |
080 | processRequest(request, response); |
085 | * <code>POST</code> method. |
087 | * @param request servlet request |
088 | * @param response servlet response |
089 | * @throws ServletException if a servlet-specific error occurs |
090 | * @throws IOException if an I/O error occurs |
093 | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
094 | throws ServletException, IOException { |
095 | processRequest(request, response); |
099 | * Returns a short description of the servlet. |
101 | * @return a String containing servlet description |
104 | public String getServletInfo() { |
105 | return "Short description" ; |
另一种较为简单的方法:
02 | * To change this template, choose Tools | Templates |
03 | * and open the template in the editor. |
05 | package net.individuals.web.servlet; |
07 | import java.io.IOException; |
08 | import java.io.PrintWriter; |
09 | import javax.servlet.ServletException; |
10 | import javax.servlet.annotation.MultipartConfig; |
11 | import javax.servlet.annotation.WebServlet; |
12 | import javax.servlet.http.HttpServlet; |
13 | import javax.servlet.http.HttpServletRequest; |
14 | import javax.servlet.http.HttpServletResponse; |
15 | import javax.servlet.http.Part; |
18 | *采用part的wirte(String fileName)上传,浏览器将产生临时TMP文件。 |
21 | @MultipartConfig (location = "e:/workspace" ) |
22 | @WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
23 | public class UploadServlet extends HttpServlet { |
26 | * Processes requests for both HTTP |
27 | * <code>GET</code> and |
28 | * <code>POST</code> methods. |
30 | * @param request servlet request |
31 | * @param response servlet response |
32 | * @throws ServletException if a servlet-specific error occurs |
33 | * @throws IOException if an I/O error occurs |
35 | protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
36 | throws ServletException, IOException { |
38 | request.setCharacterEncoding( "UTF-8" ); |
39 | Part part = request.getPart( "photo" ); |
40 | String fileName = getFileName(part); |
45 | private String getFileName(Part part) { |
46 | String header = part.getHeader( "Content-Disposition" ); |
47 | String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
54 | * <code>GET</code> method. |
56 | * @param request servlet request |
57 | * @param response servlet response |
58 | * @throws ServletException if a servlet-specific error occurs |
59 | * @throws IOException if an I/O error occurs |
62 | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
63 | throws ServletException, IOException { |
64 | processRequest(request, response); |
69 | * <code>POST</code> method. |
71 | * @param request servlet request |
72 | * @param response servlet response |
73 | * @throws ServletException if a servlet-specific error occurs |
74 | * @throws IOException if an I/O error occurs |
77 | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
78 | throws ServletException, IOException { |
79 | processRequest(request, response); |
83 | * Returns a short description of the servlet. |
85 | * @return a String containing servlet description |
88 | public String getServletInfo() { |
89 | return "Short description" ; |
使用getParts()上传多个文件:
09 | < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > |
13 | < form action = "UploadServlet3" method = "POST" enctype = "multipart/form-data" > |
16 | < td >< label for = "file1" >文件1:</ label ></ td > |
17 | < td >< input type = "file" id = "file1" name = "file" ></ td > |
20 | < td >< label for = "file2" >文件2:</ label ></ td > |
21 | < td >< input type = "file" id = "file2" name = "file" ></ td > |
24 | < td >< label for = "file3" >文件3:</ label ></ td > |
25 | < td >< input type = "file" id = "file3" name = "file" ></ td > |
28 | < td colspan = "2" >< input type = "submit" value = "上传" name = "upload" ></ td > |
对应Servlet代码:
02 | * To change this template, choose Tools | Templates |
03 | * and open the template in the editor. |
05 | package net.individuals.web.servlet; |
07 | import java.io.IOException; |
08 | import java.io.PrintWriter; |
09 | import javax.servlet.ServletException; |
10 | import javax.servlet.annotation.MultipartConfig; |
11 | import javax.servlet.annotation.WebServlet; |
12 | import javax.servlet.http.HttpServlet; |
13 | import javax.servlet.http.HttpServletRequest; |
14 | import javax.servlet.http.HttpServletResponse; |
15 | import javax.servlet.http.Part; |
21 | @MultipartConfig (location = "e:/workspace" ) |
22 | @WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
23 | public class UploadServlet extends HttpServlet { |
26 | * Processes requests for both HTTP |
27 | * <code>GET</code> and |
28 | * <code>POST</code> methods. |
30 | * @param request servlet request |
31 | * @param response servlet response |
32 | * @throws ServletException if a servlet-specific error occurs |
33 | * @throws IOException if an I/O error occurs |
35 | protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
36 | throws ServletException, IOException { |
37 | request.setCharacterEncoding( "utf-8" ); |
39 | for (Part part : request.getParts()) { |
41 | if (part.getName().startsWith( "file" )) { |
42 | String fileName = getFileName(part); |
48 | private String getFileName(Part part) { |
49 | String header = part.getHeader( "Content-Disposition" ); |
50 | String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
51 | header.lastIndexOf( "\"" ); |
58 | * <code>GET</code> method. |
60 | * @param request servlet request |
61 | * @param response servlet response |
62 | * @throws ServletException if a servlet-specific error occurs |
63 | * @throws IOException if an I/O error occurs |
66 | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
67 | throws ServletException, IOException { |
68 | processRequest(request, response); |
73 | * <code>POST</code> method. |
75 | * @param request servlet request |
76 | * @param response servlet response |
77 | * @throws ServletException if a servlet-specific error occurs |
78 | * @throws IOException if an I/O error occurs |
81 | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
82 | throws ServletException, IOException { |
83 | processRequest(request, response); |
87 | * Returns a short description of the servlet. |
89 | * @return a String containing servlet description |
92 | public String getServletInfo() { |
93 | return "Short description" ; |