groovy通过ajax获得formdata

I'm trying to transfer an image-file and corresponding information via ajax to a groovlet-server.

Problem: I can't get the data out of the HTTPServletRequest obect.

Here is the Javascript-Code that I use to transfer the data:

$("#submitButton").click( function(){
        if ( submitButtonCondition == true ) {

            //Gathering Data                
            var enabledValue = false;
            if ($("#activate").val()){
                enabledValue = true;
            }       
            var metadata = $("#metaTextarea").val();                                
            var inputFile = $("#fileInput")[0].files[0];

            // Creating FormData-Object filled with necessary Data
            var formData = new FormData();      
            formData.append('file', inputFile);
            formData.append('enabled', enabledValue);
            formData.append('metadata', metadata);

            // Sending FormData to Server
            $.ajax({
                type : 'POST',
                url : '/createNewEntry.groovy',
                contentType: false,
                processData: false,
                data: formData,
                success: function(resultData){  
                    console.log("Upload successful");
                },
                failure: function(resultData){
                    console.log("Upload failed");
                }
            });
        }
    }); 

The only way of verifying if data has been send has been accessing the attached reader of the request object: System.out.println(request.reader.text);

Output looks like this:

------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="file"; filename="blatest.png"
Content-Type: image/png


------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="enabled"

true
------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="metadata"

asdfasdfasdf
------WebKitFormBoundaryzNUfRksUAVW2ioCa--

So apparently the data has been transferred? Still, I'm struggling to get information out of methods getParameter, getParameterMap, getParameterNames, getParameterValues which all give me no output.

you got on server side multipart request

normally your request should be instanceof

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

and you can use methods:

  • Part getPart(java.lang.String name) Gets the Part with the given name.
  • java.util.Collection<Part> getParts()

Managed to get the Parts using the following external libraries:

org.apache.commons.fileupload org.apache.commons.io

Code then looks like this:

// Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();

    // Figure out ServerContext
    ServletContext servletContext = context;

    // Configure a repository (to ensure a secure temp location is used)
    File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");

    // Set factory constraints
    factory.setSizeThreshold(50000);
    factory.setRepository(repository);

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    List<FileItem> items = upload.parseRequest(request);

    // Process the uploaded items
    Iterator<FileItem> iter = items.iterator();

    while (iter.hasNext()) {
        FileItem item = iter.next()
        if (item.isFormField()) {
            processFormField(item);

        } else {
            processUploadedFile(item, servletContext);
        }
    }   

request and response are related to the groovlet object.

The methods processFormField() and ProcessUploadedFile() can access the form-Data and cached Files.

processFormField() for example is accessing the information the following way:

    private void processFormField(FileItem item) {
    String name = item.getFieldName()
    String value = item.getString()
    if (name=="enabled") {
        queryEnabledValue=value;
    }
    if (name=="metadata") {
        queryMetadata=value;
    }
}