Я пытаюсь отправить образ из ionic Front-End приложения через post метод к Back-End сервисам в Spring boot
Я сделал этот метод, который отправляет сообщение на внутренний URL-адрес с изображением внутри объекта FormData:
uploadImageService(url: string, image: any) {
console.log('post service: upload Image', + url);
// Initiates a FormData object to be sent to the server
const fd: FormData = new FormData();
fd.append('file', image);
const xhr = new XMLHttpRequest;
console.log('form data file: \n' + fd.get('file'));
xhr.open('POST', url);
// Send the FormData
xhr.send(fd);
console.log(xhr.response);
return xhr.responseText;
}
// call this method:
this.webapiService.uploadImageService(this.globalDataService.getUrlMedium() 'riskcontrol/subir-imagen', this.selectedImage);
Это метод весенней загрузки, который собирает этот пост:
@RequestMapping(method = RequestMethod.POST, value = "/subir-imagen")
public ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) {
LOGGER.log(Level.INFO, "/Post, handleFileUpload", file);
String associatedFileURL = fileManagerService.storageFile(file);
return ResponseEntity.ok(associatedFileURL);
}
Когда я делаю пост изображения, я получаю это ошибка :
.w.s.m.s.DefaultHandlerExceptionResolver: решено [org.springframework.web.multipart.support.MissingServletRequestPartException: необходимая часть запроса 'file' отсутствует]
Я запустил петицию через Почтальон , и она сработала,
вот почему я думаю, что ошибка в коде tyscript.
Единственное различие, которое я вижу между почтальоном и кодом, состоит в том, что в данных формы пусть ключ помечается как файл типа или текст типа, и я выбрал тип файла.
Я попытался сделать запрос постом по-другому:
const httpOptionsImages = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE'
})
};
// function
uploadImageService(url: string, image: any): Observable<any> {
console.log('post service: upload Image', + url);
// Initiates a FormData object to be sent to the server
const fd: FormData = new FormData();
fd.append('file', image);
return this.http
.post(url, fd, httpOptionsImages);
}
// call to the function
this.webapiService.uploadImageService(this.globalDataService.getUrlMedium() + 'riskcontrol/subir-imagen', this.selectedImage)
.subscribe( result => {
console.log(result);
});
Но таким образом я получил еще одну ошибку :
FileUploadException: запрос был отклонен, так как не было найдено многокомпонентной границы
Что я делаю не так?
Есть ли способ указать FormData , что ключ имеет тип file как в почтальоне?