#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. привет, спасибо за ответ , я только что обновил свой код, чтобы вы лучше поняли!