2017-04-18 10 views
0

ajax複数ファイルのアップロードにFormData()を使用しました。ブラウザコンソールでは、ファイルのリストが表示されますが、コントローラ内では、リストは「[オブジェクトファイル]、[オブジェクトファイル]、[オブジェクトファイル]」として文字列形式で表示されます。どのようにして値を解析できますか? 私の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でsometingを行う必要がありますか?

答えて

0

通常の内部コントローラ、あなたにリクエストからファイルを取得することができます:あなたは

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

しかし、上記のコードを使用してファイルを取得できないため、値は文字列形式です。 – Prakash

0

あなたはこのようにアクセスするすべてのファイルを反復処理することができるように

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

しかし、あなたのコードでは、複数のファイルがありますあなたのコントローラーアクション:

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

私は、バックエンドの対応するキーに関連付けられたマルチパートファイルを作成できました。

関連する問題