views:

44

answers:

2

I need to create a form that will allow, among other things, a user to upload an unknown number of files to the server running Tomcat. It would be nice if the form could add upload slots to the form as needed. I haven't found much useful on the subject, so I thought I would poll the community.

+1  A: 

You could go with something like the Commons FileUpload Project

dpb
This only answers the server side matter which is not explicitly asked in the question. The question was more targeted to the client side matter.
BalusC
@BalusC: That's why I upvoted the answer provided by kgiannakakis. Provides the complete solution.
dpb
+4  A: 

You need an ajax enabled form that can add/remove input file elements:

<table border="1px">
    <tbody class="files">
    <tr><td><a class="delete" href="#">Delete</a></td><td><input class="fileSelect"  type="file" name="file" /></td></tr>
    <tr><td><a class="delete" href="#">Delete</a></td><td><input class="fileSelect"  type="file" name="file" /></td></tr>
    <tr><td><a class="delete" href="#">Delete</a></td><td><input class="fileSelect"  type="file" name="file" /></td></tr>
    <tr><td><a class="delete" href="#">Delete</a></td><td><input class="fileSelect"  type="file" name="file" /></td></tr>
    </tbody>
    <tbody>
    <tr><td><a class="add" href="#">Add</a></td><td><input id="submitButton" type="submit" value="Upload"/></td></tr>
    </tbody>
</table>

Using jQuery:

$(function() {
    $(".delete").live("click", function() {
      $(this).parent().parent().remove();
    });

    $(".add").click(function() {
      $("tbody.files").append("<tr><td><a class='delete' href='#'>Delete</a></td><td><input class='fileSelect' type='file' name='file' /></td></tr>");
    });
});

If you use Apache Commons FileUpload, then the server code is the same, no matter how many files are sent. FileUpload allows you to iterate over all uploaded files.

kgiannakakis
Thanks, this has proved to be exactly what I was looking for.
sabauma