Загрузка изображения из Angular 7 в Spring-boot - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь передать изображение из моего приложения Angular в Spring, но мне кажется, что я не могу заставить его работать.Когда я отправляю запрос POST из angular вместе с файлом, весенняя загрузка, похоже, совсем не реагирует, поэтому я протестировал его с PostMan, и у меня появляется следующая ошибка:

 "timestamp": "2019-05-05T06:45:26.907+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "No primary or default constructor found for class java.io.File",
    "path": "/upload"

и в SpringЗагрузка:

ERROR 18100 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for class java.io.File] with root cause

, а также не удалось выполнить декодирование символов.

В выводе Spring, похоже, правильно угадан тип файла (изображение jpeg) и его имя.

Вот весенний загрузочный приемник:

@RequestMapping(method = RequestMethod.POST,value ="/upload")
     public void postImage(File file) throws IOException {
     System.out.println("received");
}

Позже я планирую записать изображение в папку, но сейчас я просто хочу его получить.

Ниже угловая часть

<form>
    <div>Title:  <input type="text" id="input" [(ngModel)]="img.name" 
[ngModelOptions]="{standalone: true}"> 
      <br>
      <input type="file" (change)='handleImages($event)' >
    </div> 
    <br>
   <button type="submit" class="confirm"(click) = 
'add()'>Confirm</button>
 </form>

component.ts:

handleImages(Event){  
      this.selectedFile = Event.target.files[0];
      console.log(this.selectedFile);
      this.http.post('http://localhost:8080/upload',this.selectedFile)
}

1 Ответ

0 голосов
/ 05 мая 2019

Вам нужно изменить параметр File на MultipartFile

//@RequestMapping(method = RequestMethod.POST,value ="/upload")
@PostMapping(value = "/upload")
public void postImage(@RequestParam("file") MultipartFile file) throws IOException {
     System.out.println("received");
}

и перенос содержимого файла в FormData

handleImages(Event){  
      this.selectedFile = Event.target.files[0];
      let formData = new FormData();
      formData.append("file", this.selectedFile);
      console.log(this.selectedFile);
      this.http.post('http://localhost:8080/upload',formData)
}
...