2017-04-18 36 views
0

我已经使用FormData()进行ajax多文件上传。在浏览器控制台中,显示文件列表,但在控制器内部,列表以字符串格式显示为“[object file],[object File],[object FIle]”。我如何解析它的值? 我的JavaScript代码:在grails控制器中解析ajax多文件上传

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 []),但只输出 “目标文件” 字符串。在发送给控制器之前,我应该在javascript中处理?

回答

0

通常内部控制器,你可以请求作为获取文件:

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

但在你的代码中,有多个文件,所以你可以遍历每个文件

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

但值的字符串格式,所以我不能使用上述代码获取文件。 – Prakash

0

您访问像这样的您的控制器动作:

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

希望这将帮助你!。

+0

输入以纯字符串形式出现在“[目标文件],[目标文件],[目标文件]”格式。所以我不能使用上面的方法。 – Prakash

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键相关联的多部分文件。