簡體   English   中英

使用Angular將多個文件上傳到Spring Controller

[英]Upload multiple files with Angular to Spring Controller

我想將多個文件上傳到服務器。 這是我的Angular代碼:

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

終於我明白了。 解決方案是將所有文件分開添加到FormData中,而不是列表或數組中:

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

然后在Spring控制器中:

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

該數組包含所有附加文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM