MissingServletRequestPartException:所需的请求部分'file'不存在

时间:2017-02-04 12:18:04

标签: angularjs spring

我一直在关注this,但似乎我的问题出在其他地方。我正在尝试上传文件。 input目前定义为:

<input 
    type="file" 
    style="display: none;"
    name="file"     
    multiple    
    nv-file-select                  
    uploader="uploader">

这是上传的执行方式:

var uploader = $scope.uploader = new FileUploader({
    url: 'http://localhost:8080/rest-api/dl4j/we/uploadModel'
});

uploader.onAfterAddingFile = function($modelFile) {

    var fd = new FormData();        
    fd.append('file', $modelFile.file);

    $http.post($modelFile.url, fd, {
        headers: {
            'Content-Type': undefined
        },
        transformRequest: angular.identity          
    })
    .then(
        function (data) {
            alert("upload success");
        }, 
        function (data, status) {
            alert("upload error");
        }
     );
};

这是Spring REST端点:

@PostMapping(WordEmbeddingApiPaths.UPLOAD_MODEL)
@RequestMapping(method=RequestMethod.POST, headers={"Content-Type=multipart/form-data"})
public ResponseEntity<WordVectorListDto> uploadModel( 
        @RequestParam("file") MultipartFile file,
        RedirectAttributes redirectAttributes) {

    LOGGER.debug("POST uploadModel");

    return new ResponseEntity<WordVectorListDto>((WordVectorListDto)null, HttpStatus.OK); 
}

问题是,Spring会抛出一个异常,告诉我参数file不存在:

org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present

这是请求信息:

enter image description here

如何使此文件上传工作?

1 个答案:

答案 0 :(得分:0)

我猜它可能与内容类型有关 在你的代码中我看到了:

$http.post($modelFile.url, fd, {
        headers: {
            'Content-Type': undefined
        },
        transformRequest: angular.identity          
    })

所以你要定义一个未定义的内容类型;你应该设置multipart/form-data 尝试将此内容类型

我希望它有用

安吉洛