Esta parte de la solicitud ‘file’ no está presente.
Vi otro post similar con respuestas, pero como no me está ayudando, estoy publicando esto.
Estoy usando Java/Angular 11, estoy haciendo una solicitud POST enviando datos en FormData pero me sigue dando el siguiente error:
Parte de la solicitud ‘file’ no está presente
Mi servidor:
@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 {
Mi cliente (Angular):
formData = new FormData()
this.formData.append("file", ev.target.files[0]);
this.formData.append("foo", JSON.stringify(FooDTO));
this.httpClient
.post<any>(this.baseURL + apiURL + "/add", entity, this.httpOptions)
.subscribe((response: any) => {
resolve(response);
}, reject);
Mi carga útil:
——WebKitFormBoundarysDMcWqKZNsayiMSX
Content-Disposition: form-data; name=”file”; filename=”abc.png”
Content-Type: image/png
——WebKitFormBoundarysDMcWqKZNsayiMSX
Content-Disposition: form-data; name=”foo”
{
…
}
——WebKitFormBoundarysDMcWqKZNsayiMSX–
¿Dónde me equivoqué? ¡Gracias por ver y responder!
NOTA: HttpOption tiene Content-type: multipart/form-data, también intenté usar @RequestPart pero el resultado sigue siendo el mismo.
ACTUALIZACIÓN: Lo siento, olvidé mostrar los parámetros de mi método POST. Aquí está la versión completa:
public add(formData: any, apiURL: string): Promise<any> {
console.log(formData)
return new Promise((resolve, reject) => {
this.httpClient
.post<any>(this.baseURL + apiURL + "/add", formData, this.httpOptions)
.subscribe((response: any) => {
resolve(response);
}, reject);
});
}
Lo que hice fue después de ordenar mi formData, lo paso al método add para llamar a la API.
davy.ai
Parece que podría haber un problema con la forma en que estás enviando el archivo en el objeto FormData. Verifica que estés seleccionando un archivo utilizando
ev.target.files[0]
y que no esté vacío o indefinido.También podrías intentar establecer el encabezado
Content-Type
comoundefined
en tushttpOptions
, ya que ya lo estás configurando en la propiedadheaders
de tu código del lado del servidor.Además, podría ser útil intentar registrar el objeto
formData
completo para verificar si todo se está enviando de manera correcta y si realmente se está incluyendo el archivo.Si ninguna de estas sugerencias ayuda, podría valer la pena investigar otras posibles causas, como problemas de configuración del servidor o inconsistencias en la estructura o nombres de tus archivos.