formbyata通过ajax与groovy

时间:2017-09-06 09:59:05

标签: javascript ajax groovy form-data

我试图通过ajax将图像文件和相应的信息传输到groovlet-server。

问题: 我无法从HTTPServletRequest对象中获取数据。

以下是我用来传输数据的Javascript代码:

$("#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");
                }
            });
        }
    }); 

验证数据是否已发送的唯一方法是访问请求对象的附加阅读器:System.out.println(request.reader.text);

输出如下:

------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--

显然数据已被转移? 尽管如此,我仍在努力从方法getParameter, getParameterMap, getParameterNames, getParameterValues中获取信息,这些方法都没有给我任何输出。

2 个答案:

答案 0 :(得分:0)

你得到了服务器端多部分请求

通常你的request应该是instanceof

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

你可以使用方法:

  • Part getPart(java.lang.String name)获取具有给定名称的Part。
  • java.util.Collection<Part> getParts()

答案 1 :(得分:0)

使用以下外部库管理以获取部件:

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

代码看起来像这样:

// 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);
        }
    }   

requestresponse与groovlet对象相关。

方法processFormField()ProcessUploadedFile()可以访问表格 - 数据和缓存文件。

例如,

processFormField()以下列方式访问信息:

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