当前位置: 首页 > 知识库问答 >
问题:

用Angular上传多个文件到Spring控制器

曾洲
2023-03-14

我想上传多个文件到服务器。这是我的角度代码:

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)

“files”列表总是空的(我也尝试了MultipartFile[]而不是list)。只有在指令中返回的不是所有文件,而是一个文件时,它才有效,例如:

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

代替

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

共有1个答案

李招
2023-03-14

终于我明白了。解决方案是将所有文件分开添加到FormData中,而不是作为列表或数组:

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

然后在Spring控制器中:

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

该数组包含所有追加的文件。

 类似资料:
  • 我有一个这样的控制器,我想提交一个带有文件上传的表单,以及一些表单数据,如下图所示的标签。此外,我想使用@RequestBody来实现这一点,以便在添加更多变量时,在包装器上使用@Valid注释。 我的包装纸是: 但我想将其从ModelAttributes转换为@RequestBody。 我尝试的方法是将文件上传作为请求参数分开,如下所示: 在模拟MVC中,我设置: 但我得到了这样一个错误,它说:

  • 我需要上传文件使用Spring引导和角,所以这是控制器代码,很好地工作使用邮差 -component.ts代码: -HTML代码: 出现此错误

  • 我试图创建一个页面,用户可以张贴图像及其细节。现在,当我测试来自postman的spring boot服务时,我能够成功地在服务中获取文件。当我试图从angular5中做同样的事情时,多部分文件在服务中没有被识别,并且总是得到空数组。 我的角服务代码如下 } 我已经尝试添加标头,如multipart/form-data,并将其设置为un定义。无论哪种方式,我都收到了错误。在发布到这里之前,我已经广

  • 我正在尝试使用angularjs和spring MVC上传一个文件 在application-context.xml中有一个multipartResolver bean。 我表单如下所示:

  • 是否可以使用数据上传包含其他数据(如描述等)的文件?我正在使用骨干.js在我的前端,我用它调用REST API(jQuery)。我不使用任何视图解析器,但我想以某种方式将我的文件传递给控制器,如下所示: 以便uploadItem存储: 但是我不会(也不能)把这个加到我的模型里。 当然,我也很感兴趣是否有可能有这样的控制器:

  • 我使用Spring引导上传文件。文件大小通常约为2GB,我们不能使用默认的Spring引导或,因为服务器具有有限的资源(磁盘空间)或用于缓冲的内存。所以我们想获取文件输入蒸汽并将文件直接存储到云存储中。 我知道spring boot有<code>多部分。已启用属性,因此我可以将其设置为false以跳过spring。但这会全局禁用多部分。是否有人知道是否有方法通过控制器/方法禁用多部分?