在grails控制器中解析ajax多文件上传

时间:2017-04-18 07:34:38

标签: ajax spring grails

我已经使用FormData()来上传ajax多个文件。在浏览器控制台中,显示文件列表但在控制器内部,列表显示为" [对象文件],[对象文件],[对象文件]"字符串格式。我如何解析它的价值? 我的javascript代码是:

var form = jQuery("#upload-form").find('input[type="file"]');
var picData = new FormData();
var fl = form.get(0).files.length;
var files = []; 

for (var i = 0; i < fl; i++) {

    files.push(form.get(0).files[i]);
    console.log(files); //The list files is shown
}

 picData.append("filesList[]",files);

jQuery.ajax({ 
   url: 'upload/fileSave',
   type: 'post',
   dataType:'json',
   data:picData,
   enctype:"multipart/form-data",
   contentType:false,
   processData:false,
   success: function(data) {
            }
});

我做了JSON.parse(params.filesList [])但它只输出&#34;对象FIle&#34;串。在我发送给控制器之前,我应该在javascript中做些什么吗?

3 个答案:

答案 0 :(得分:0)

通常在控制器内部,您可以从请求中获取文件:

File file    = request?.getFile('fileName')

但是在您的代码中,有多个文件,因此您可以迭代每个文件

File file0    = request?.getFile('filesList[0]')
File file1    = request?.getFile('filesList[1]')

答案 1 :(得分:0)

您可以在控制器操作中进行如下操作:

 for (filename in request.getFileNames()) {
        MultipartFile fileContent = request.getFile(filename)
        println "This file name" + filename
        println "This file is file content" + fileContent                    
  }

希望这会对你有帮助!!!。

答案 2 :(得分:0)

我做了一个解决方法。在将其传递给后端之前,我必须将每个文件放在键值对中。

jQuery('#file-submit-save').click(function(){

                               var form = jQuery("#upload-form").find('input[type="file"]');
                               var picData = new FormData();
                               var fl = form.get(0).files.length;
                               for (var i = 0; i < fl; i++) {
                               picData.append("files["+i+"]", form.get(0).files[i]);
                               }
                               picData.append('fileSize',fl);

                            jQuery.ajax({
                                   url: '/fileupload/ajaxSave',
                                   type: 'post',
                                   dataType:'json',
                                   data:picData,
                                   enctype:"multipart/form-data",
                                   contentType:false,
                                   processData:false,
                                   success: function(data) {
                                   }
                               });
                           }
                       });

只有这样我才能将多部分文件与后端中的corressponding键相关联。