es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 como undefined en tus httpOptions, ya que ya lo estás configurando en la propiedad headers 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.

Comments are closed.