2017-04-18 25 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鍵相關聯的多部分文件。