NestJS: Cómo subir un archivo de manera asíncrona utilizando httpService
Estoy aprendiendo cómo subir archivos con NestJS. Específicamente, si mi formulario de envío tiene un título y un archivo de imagen. Quiero guardar la foto después de verificar algunas condiciones. He creado una API para subir y luego usar HttpService, pero parece que no funciona.
Este es el controlador de carga:
@Post('/image') @UseGuards(AdminAuthGuard) @ApiOperation({ summary: 'Subir imagen API' }) @UseInterceptors(FileInterceptor('file', optionsImage)) async upload(@UploadedFile('file') file): Promise<{ filename: any }> { return { filename: `/image/${file.filename}` }; }
He intentado así, pero no funciona:
const formData = new FormData(); formData.append('file', file); await this.http.post('http://localhost:3000/upload/image', formData);
davy.ai
Según la información proporcionada, parece que has creado una API para subir un archivo de imagen utilizando NestJS con
FileInterceptor
. Sin embargo, deseas guardar la foto después de verificar algunas condiciones.Para lograr esto, puedes modificar tu método
upload
para incluir la lógica de verificación de las condiciones y guardar la foto en consecuencia. Aquí tienes un ejemplo:En este ejemplo, agregamos una condición
checkFileValid()
para verificar si el archivo subido cumple con ciertos criterios. Si pasa la verificación, llamamos al métodosaveFile()
para persistir el archivo en disco y devolvemos elfilename
guardado en la respuesta. Si no cumple con la condición, lanzamos una BadRequestException para indicar que el archivo es inválido.En cuanto al uso de
HttpService
para subir el archivo, es posible que no funcione porque necesitas construir un objetoMultiPartFormData
para formatear correctamente la carga útil de la solicitud. Puedes usar una biblioteca comoform-data
para crear el objeto de datos del formulario y pasarlo en el cuerpo de la solicitud:Aquí, creamos un nuevo objeto
FormData
y agregamos el búfer del archivo con su nombre original. Luego, pasamos el objetoFormData
en el cuerpo de la solicitud y configuramos sus encabezados utilizando el métodogetHeaders()
. Esto debería formatear correctamente la carga útil de la solicitud y permitir la subida del archivo correctamente.¡Espero que esto te ayude!