Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multi part upload file servlet [duplicate]

How can I upload files and get other paramaters of a form? I want to handle multi part requests in Java servlet.

like image 945
bhard Avatar asked Feb 04 '10 06:02

bhard


2 Answers

To browse and select a file for upload you need a <input type="file"> field in the form. As stated in the HTML specification you need to use the POST method and the enctype attribute of the form has to be set to multipart/form-data.

<form action="uploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" />
</form>

After submitting such a form the form data is available in multipart format in the HttpServletRequest#getInputStream(). For testing(!) purposes you can read the stream using the following snippet:

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
}

You however need to parse the stream byte by byte (instead of char by char). Prior to the fresh new Servlet 3.0 API, the standard Servlet API didn't provide any builtin facilities to parse them. The normal form fields are also not available the usual request.getParameter() way, they are included in the multipart form data stream.

If you're not on Servlet 3.0 yet (which is only bit less than 2 monts old), then you need to parse the stream yourself. Parsing such a stream requires precise background knowledge of how multipart form data requests are specified and structured. To create a perfect multipart parser you'll have to write a lot of code. But fortunately there's the Apache Commons FileUpload which has proven its robustness with years. Carefully read both the User Guide and Frequently Asked Questions to find code examples and learn how to use it to an optimum degree (take MSIE into account!).

like image 138
BalusC Avatar answered Sep 21 '22 10:09

BalusC


Step 1

Read adatapost's post.

Step 2

Check out the Apache Commons FileUpload project.

There's a similarly workable solution by O'Reily, but its license of use requires you buy a book, and even that requirement is so poorly articulated that I won't benefit it with yet another link.

like image 40
Justin Searls Avatar answered Sep 20 '22 10:09

Justin Searls