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.

Cómo guardar una imagen blob en una carpeta del servidor en ASP.NET MVC

Estoy tratando de manejar una llamada POST utilizando el componente de react-admin.
Cuando llamo a POST, el siguiente Payload se envía a mi servidor ASP.NET MVC.

{
    "event_title": "test",
    "event_date": "1111-11-11",
    "event_description": "test",
    "event_poster": {
        "rawFile": {
            "path": "test.jpg"
        },
        "event_poster": "blob:http://localhost:3000/d536e2d0-21ee-40c1-8a1a-34c5d725015c",
        "title": "test.jpg"
    }
}

El problema está en el atributo ‘event_poster’. No sé cómo obtener la imagen de esta URL de blob y guardarla en la carpeta de mi servidor.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para manejar la llamada POST utilizando el componente ImageInput de react-admin, es necesario extraer el archivo de imagen del atributo event_poster y enviarlo por separado al servidor. Puedes lograr esto utilizando la API FormData en JavaScript. A continuación te mostramos un ejemplo de código que puede ayudarte a lograr esto en tu servidor ASP.NET MVC:

    [HttpPost]
    public async Task<iactionresult> CreateEvent([FromForm] EventModel eventModel)
    {
        try
        {
            if (ModelState.IsValid)
            {
                if (eventModel.EventPoster != null)
                {
                    // Extraer el archivo de imagen desde la URL del blob y guardarlo en una carpeta local
                    string imagePath = "ruta/para/guardar/imagen";
                    using (var client = new WebClient())
                    {
                        client.DownloadFile(eventModel.EventPoster, imagePath);
                    }
    
                    // Establecer la propiedad EventPoster como la ruta del archivo de imagen guardado
                    eventModel.EventPoster = imagePath;
                }
    
                // Guardar el evento en la base de datos
                _context.Events.Add(eventModel);
                await _context.SaveChangesAsync();
    
                return Ok(eventModel);
            }
            else
            {
                return BadRequest(ModelState);
            }
    
        }
        catch (Exception ex)
        {
            return StatusCode(500, ex.Message);
        }
    }
    

    En el código anterior, estamos utilizando la clase WebClient para descargar el archivo de imagen desde la URL del blob y guardarlo en una carpeta local. Luego, establecemos la propiedad EventPoster del objeto EventModel como la ruta del archivo de imagen guardado. Finalmente, guardamos el objeto evento en la base de datos.

    Nota: Debes asegurarte de que la carpeta local donde estás guardando la imagen tenga los permisos adecuados para permitir las operaciones de lectura y escritura de archivos.

Comments are closed.