Эта часть запроса «файл» отсутствует

#java #angular #request #parameter-passing #payload

Вопрос:

Я видел другой аналогичный пост с ответами, но так как это мне не помогает, я публикую это.

Я использую Java/Angular 11, я делаю запрос на отправку данных в формате FormData, но он продолжает давать мне

 Request part 'file' is not present  

Мой Сервер

 @PostMapping(value = /add, consumes = MediaType.MULTIPART_FORM_DATA_VALUE,headers = ("content-type=multipart/*"))  public ApiResponseEntity add(@RequestParam("file") MultipartFile file,  @RequestParam("foo") Foo foo) throws IOException {  

Мой клиент(Угловой)

 formData = new FormData() this.formData.append("file", ev.target.files[0])); this.formData.append("foo",JSON.stringify(FooDTO));  this.httpClient  .postlt;anygt;(this.baseURL   apiURL   "/add", entity, this.httpOptions)  .subscribe((response: any) =gt; {  resolve(response);  }, reject);  

Моя Полезная нагрузка: ——WebKitFormBoundarysDMcWqKZNsayiMSX Содержимое-Расположение: форма-данные; имя=»файл»; имя файла=»abc.png» Тип содержимого: изображение/png

——WebKitFormBoundarysDMcWqKZNsayiMSX Содержимое-Расположение: форма-данные; имя=»foo»

{ … } — — — — — — WebKitFormBoundarysDMcWqKZNsayiMSX—

Где я ошибся? Спасибо за просмотр и ответы!

ПРИМЕЧАНИЕ: HttpOption имеет тип содержимого: составные/данные формы, я также пытался использовать @RequestPart, но результат все тот же

ОБНОВЛЕНИЕ: Извините, я забыл показать параметры метода публикации, вот полная версия

 public add(formData: any, apiURL: string): Promiselt;anygt; {   console.log(formData)  return new Promise((resolve, reject) =gt; {  this.httpClient  .postlt;anygt;(this.baseURL   apiURL   "/add", formData, this.httpOptions)  .subscribe((response: any) =gt; {  resolve(response);  }, reject);  });  }  

Что я сделал, так это после того, как я отсортировал свои данные формы, я передал их в метод add выше, чтобы вызвать API

Ответ №1:

Я думаю, что вы не передаете данные формы в своем http-сообщении, измените нижеприведенную строку кода с

 this.httpClient  .postlt;anygt;(this.baseURL   apiURL   "/add", entity, this.httpOptions)  .subscribe((response: any) =gt; {  resolve(response);  }, reject);  

как показано ниже

 this.httpClient.postlt;anygt;(this.baseURL   apiURL   "/add", formData, this.httpOptions)  .subscribe((response: any) =gt; {  resolve(response);  }, reject);  

Комментарии:

1. привет, спасибо за ответ , я только что обновил свой код, чтобы вы лучше поняли!