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

使用angular factory service和$Resource将多部分上传到Spring Rest

方航
2023-03-14

下面是我的视图表单:

<form method="post" enctype="multipart/form-data" ng-submit="submit()">
  <table>
    <tr><td>File to upload:</td><td><input type="file" name="file" ng-model="form.file"/></td></tr>
    <tr><td>Name:</td><td><input type="text" name="name" ng-model="form.name"/></td></tr>
    <tr><td></td><td><input type="submit" value="Upload"  /></td></tr>
  </table>
</form>

下面是视图控制器:

$scope.submit=function(){
    GalleryService.upload({file: $scope.form.file, name: $scope.form.name}, function(data) {
         console.log("Success ... " + status);
    }, function(error) {
         console.log(error);
    });
}

展厅服务:

(function() {

“用严”;

return $resource(restApi.url + '/study/:action', {},{
  save: {method: 'POST', params: {action: 'save'}},
  getAll: {method: 'GET', params: {action: 'getAll'},isArray:true},
  upload: {method: 'POST', params: {action: 'upload'}, transformRequest: angular.identity,headers: { 'Content-Type': undefined }}


});
@RequestMapping(value = "/upload",method = RequestMethod.POST,headers = "content-type=multipart/*")
public String handleFileUpload(@RequestParam("name") String name,
                               @RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    if (name.contains("/")) {
        redirectAttributes.addFlashAttribute("message", "Folder separators not allowed");
        return "redirect:upload";
    }
    if (name.contains("/")) {
        redirectAttributes.addFlashAttribute("message", "Relative pathnames not allowed");
        return "redirect:upload";
    }

    if (!file.isEmpty()) {
        try {
            BufferedOutputStream stream = new BufferedOutputStream(
                    new FileOutputStream(new File("user/bouhuila/" + name)));
            FileCopyUtils.copy(file.getInputStream(), stream);
            stream.close();
            redirectAttributes.addFlashAttribute("message",
                    "You successfully uploaded " + name + "!");
        }
        catch (Exception e) {
            redirectAttributes.addFlashAttribute("message",
                    "You failed to upload " + name + " => " + e.getMessage());
        }
    }
    else {
        redirectAttributes.addFlashAttribute("message",
                "You failed to upload " + name + " because the file was empty");
    }

    return "redirect:upload";
}

共有1个答案

耿运浩
2023-03-14

我看不见什么

 GalleryService.upload

正在进行,但看起来您并不是真正将表单发送到服务器,而只是将一些字段发送到服务器。在这种情况下

enctype="multipart/form-data"

将不会被使用,这可以解释您得到的错误。

在浏览器中的开发工具中查看一下,哪个请求实际上被发送到您的服务器,以及它正在使用哪种内容类型。

 类似资料:
  • 我正在尝试使用node.jsaws-sdk将大文件上传到s3存储桶。 方法以分段上传方式完整上传文件。 我想使用新的V3 aws-sdk。在新版本中上传大文件的方法是什么?方法似乎没有这样做。 我见过一些方法,例如,但我似乎找不到使用它们的完整工作示例。 先谢谢你。

  • 我需要上传一个更大的文件到 AWS 冰川的评估。由于大小,我无法在一个请求中执行此操作,因此我需要将其拆分为较小的部分并使用分段上传。 Boto3是否包含一个方法,该方法获取一个大文件,拆分并逐个上传它的部分?正如我所见Java客户端有这样的方法(取自AWS文档): 高级API提供了一种方法,您可以使用该方法上传任何大小的存档。根据您要上传的文件,该方法可以在单个操作中上传存档,也可以使用Amaz

  • 嗨,我有一个问题,当我可以尝试上载一个文件的属性和元数据到alFresco 5.2使用php 5.4.3,这是我的代码: $pam['body']是这样的: 这显示此错误: 但这个错误意味着一个或多个参数是错误的,但我不知道是哪个,因为服务器有大量的磁盘空间。 有什么帮助吗?有人使用ApiRest Alfresco 5.2和PHP吗?

  • 我正在尝试向S3发出上传请求,以便上传一个文件。在我目前掌握的最可靠的代码下面, 我总是从服务器收到400(错误请求)。我不确定我是否正确使用了多部分上传。 但是当我使用像POSTMAN这样的任何Rest客户端做同样的事情时,它工作得很好, 这将是有帮助的,如果有人可以抛出一些光在多部分上传放心。 我已经查看了以下链接, 放心文档 放心的示例 编辑1: 我试着将上面的邮递员请求转换成curl,并用

  • 我使用Spring MVC作为Rest控制器,我已经使用Springfox将Swagger用户界面与我的控制器集成在一起。我希望有一个能够通过Swagger用户界面上传文件的方法。我只需要两个参数,一个对象id的长代理和要上传的文件。 我几乎什么都试过了,但我无法显示文件上传按钮。但是,如果我这样做: 文件上载按钮出现,但在尝试上载文件时,它总是抛出http代码415。此外,我需要输入一个多部分文

  • 我想通过调用rest web服务上传文件。此web服务需要MultipartFile。 我在这里读到我可以做到这一点:使用Spring Rest模板Spring Web MVC上传多部分文件 这是我的代码: 杰克逊尝试以JSON形式序列化该文件,但它失败了,并出现以下错误: 如何禁用文件的json序列化?