2017-11-28 22 views
0

複数のファイルをサーバーにアップロードしたい。ここに私の角度のコードは次のとおりです。複数のファイルをSpringコントローラにアップロード

app.directive('fileModel', ['$parse', function ($parse) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
      var model = $parse(attrs.fileModel); 
      var modelSetter = model.assign; 

      element.bind('change', function() { 
       scope.$apply(function() { 
        modelSetter(scope, element[0].files); 
       }); 
      }); 
     } 
    }; 
}]); 

とコントローラの一部:

var fd = new FormData(); 
fd.append('files', $scope.file); 
fd.append('ticketDto', JSON.stringify(data)); 
$http({ 
    method: 'POST', 
    url: url, 
    headers: { 
     'Content-Type': undefined 
    }, 
    data: fd, 
    arrayKey: '', 
    transformRequest: function (data, headersGetterFunction) { 
     return data; 
    } 
}) 

問題がコントローラであることである:

public void createTicket(@RequestParam(value = "files", required = false) List<MultipartFile> files, 
         Authentication authentication, 
         @RequestParam(value = "ticketDto", required = false) String name) 

'ファイル' リストは常に空です(私はまた、リストの代わりにMultipartFile []を試しました)。

scope.$apply(function() { 
    modelSetter(scope, element[0].files[0]); 
}); 

代わり

scope.$apply(function() { 
    modelSetter(scope, element[0].files); 
}); 

答えて

0

の最後に、私はそれを得た:それは、ディレクティブリターンで例えばないすべてのファイルが、1は、場合にのみ機能します。解決策はありません、リストや配列など、離れているFormDataにすべてのファイルを追加することです:春のコントローラで

angular.forEach($scope.file, function (value, key) { 
      fd.append('files', value); 
     }) 

そして:

public void createTicket(@RequestParam(required = false) MultipartFile[] files) 

配列は、すべての追加のファイルが含まれています。

関連する問題