Java Servlet & JSP Cookbook
Web sites use the HTML form tag to allow users to submit files from their own filesystem for processing on the server. The form tag enables the uploading action with a nested input element that has a type attribute set to "file". The form and input tag is specified using the syntax described in Recipe 8.1. The HTTP request for file uploading uses a content type of "multipart/form-data". The HTTP message that the user sends to the server by clicking the web page's Submit button contains descriptive headers and the body of each uploaded file. Each of the uploaded files is separated by a specified boundary pattern (see the Content-Type header value in Example 8-1). Example 8-1 shows an abbreviated view of a "multipart/form-data" type request including the uploading of three very small files. To make this example more compact, I have removed some of the values from the Accept request header. Example 8-1. An HTTP request message with three uploaded files
POST /home/upload.jsp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg ... Referer: http://localhost:8080/home/interact.html Accept-Language: en-us Content-Type: multipart/form-data; boundary=---------------------------7d33c11c6018e Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0) Host: localhost:9000 Content-Length: 541 Connection: Keep-Alive Cache-Control: no-cache Cookie: JSESSIONID=7F6154184FFF3D1AE345E1F2FFF1A22E -----------------------------7d33c11c6018e Content-Disposition: form-data; name="file1"; filename="H:\home\file1.txt" Content-Type: text/plain This is file 1. -----------------------------7d33c11c6018e Content-Disposition: form-data; name="file2"; filename="H:\home\file2.txt" Content-Type: text/plain This is file 2. -----------------------------7d33c11c6018e Content-Disposition: form-data; name="file3"; filename="H:\home\file3.txt" Content-Type: text/plain This is file 3. -----------------------------7d33c11c6018e-- The HTTP request delineates each uploaded file with a boundary pattern: -----------------------------7d33c11c6018e. Each of the files has a Content-Disposition and Content-Type header. The simple text files that Example 8-1 uploads to the server have only one line each to give you a clear snapshot of what this type of HTTP request looks like. For more details on the file-uploading mechanism itself, see RFC 1867: http://www.ietf.org/rfc/rfc1867.txt. |