【发布时间】:2017-10-23 02:02:44
【问题描述】:
我需要上传一张使用 Spring Boot 编写的照片到服务器。对于发送请求的前端,我使用 Angular2。
这是我接受 HTTP 请求的 API。它工作正常。 (我用 Postman 测试过)
@RequestMapping(method = RequestMethod.POST, value = "/tender/save-new/save-photo")
public ResponseEntity<?> uploadPhoto(@RequestParam("file") MultipartFile file){
if (file.isEmpty()) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("DEBUG: Attached file is empty");
return new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.NOT_FOUND);
}
String returnPath = null;
try {
// upload stuff
} catch (IOException e) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage(e.getMessage());
return new ResponseEntity<ErrorResponse> (errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<String>(returnPath, HttpStatus.OK);
}
我不确定我应该如何在 Angular2 中编写代码来调用服务器。 以下是我想出的。
savePhoto(photoToSave: File) {
let formData: FormData = new FormData();
formData.append('file', photoToSave);
let savedPath = this._http
.post(this._endpointUrl + "tender/save-new/save-photo", formData)
.map(
res => {
return res.json();
}
)
.catch(handleError);
return savedPath;
}
如您所见,我在发送表单数据之前将'file' 参数附加到表单数据中。服务器方法接受RequestParam 作为'file'。
但是,在服务器日志中,我收到以下错误。
org.springframework.web.multipart.MultipartException:当前请求 不是多部分请求 org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:190)
请注意,我没有声明 CommonsMultipartResolver bean,因为 SprinBoot 隐式处理它。 (我听说过。如果我错了,请纠正。)
我认为错误是由于请求中缺少值而出现的。 handleMissingValue 的 Spring 在说什么?我错过了什么?
【问题讨论】:
标签: spring angular http spring-boot