Я использую AngularJS, чтобы сделать мой интерфейс, и Java с Spring Boot, чтобы сделать мой бэкэнд. Я пытаюсь импортировать / загрузить файл xlsx, xls или ods из Angular в мой Java, но что бы я ни делал, запрос не отправляет мой файл!
Java конечная точка:
@PostMapping(value = "/upload/{type}")
@ResponseBody
private ResponseEntity<List<Rota>> importFile(@PathVariable("type") String type,
@RequestParam(required = false, value = "file") MultipartFile fileParam,
@RequestBody MultipartFile file) {
System.out.println("File: " + file.getName());
if(type.toUpperCase().equals("XLSX")){
System.out.println("XLSX!");
}else if(type.toUpperCase().equals("XLS")){
System.out.println("XLS!");
}else if(type.toUpperCase().equals("ODS")){
System.out.println("ODS!");
}else{
System.out.println("OPS!");
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.UNSUPPORTED_MEDIA_TYPE);
}
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
}
Мой идентификатор запроса сделан с использованием класса Angular, подготовленного только для выполнения запросов. Я опубликую здесь код, который мы обычно используем в проекте, и код, который действительно работал, но я не могу его использовать.
DataFactory:
DataFactory.POST = function (url, entity, config = null) {
if (url && entity) {
return $http
.post(url, entity, config)
.then(res => $q.resolve(res.data), error => $q.reject(error));
}
};
Код, который действительно работал :
var xhr = new XMLHttpRequest;
xhr.open('POST', `${URL.CTM_ODS()}/rotas/upload/${type}`, true);
xhr.send(formData);
Когда я использую Postman, отправляя файл через тело, серверная часть получает нулевое значение, но когда я использую данные формы из Postman, работает нормально! Используя DataFactory, я получил следующий стек на своей стороне:
WARN 16796 --- [p1002886236-126] org.eclipse.jetty.http.HttpParser : badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@78fd8670{r=2,c=false,a=IDLE,uri=}