none
Agregar image a SQL Server RRS feed

  • Pregunta

  • Hola amigos,

    Estoy cambiando un sistema a MVC (soy casi nuevo en MVC) el sistema estaba en windows y cuando se cargaba el producto se adjuntaba una imagen del producto para consultar.

    En MVC como seria la carga de la imagen a SQLServer?

            // POST: Producto/Create
            [HttpPost]
            public ActionResult Create(ParProducto ParProducto, HttpPostedFileBase imgpro)
            {
                try
                {
    
    
                    int regreso = ProductoBL.Agregar(ParProducto);
    
                    return View("Confirma");
                }
                catch
                {
                    return View("Error");
                }
            }


    Conocuica

    domingo, 21 de abril de 2019 13:59

Respuestas

  • Si muchas gracias ya lo resolvi

            // POST: Producto/Create
            [HttpPost]
            public ActionResult Create(ParProducto ParProducto)
            {
                try
                {
                    if (Session["usuario"] == null)
                    {
                        return RedirectToAction("Login", "Inicio");
                    }
    
                    HttpPostedFileBase imgpro = Request.Files["imgpro"];
                    if (imgpro != null && imgpro.ContentLength > 0)
                    {
    
                    }
    
                    ParUsuario u = null;
                    u = (ParUsuario)Session["usuario"];
                    ParProducto.usuariocorto = u.usuariocorto;
    
                    System.Globalization.CultureInfo customCulture = new System.Globalization.CultureInfo("en-US", true);
                    customCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd h:mm tt";
                    System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
                    System.Threading.Thread.CurrentThread.CurrentUICulture = customCulture;
                    DateTime newDate = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd h:mm tt"));
    
    
                    ParProducto.Fecharegistro = newDate;
                   ParProducto .ParProductoImagen = ConvertToBytes(imgpro);
                    int regreso = ProductoBL.Agregar(ParProducto);
    
                    return View("Confirma");
                }
                catch
                {
                    return View("Error");
                }
            }
    
    
            public byte[] ConvertToBytes(HttpPostedFileBase image)
            {
                byte[] imageBytes = null;
                BinaryReader reader = new BinaryReader(image.InputStream);
                imageBytes = reader.ReadBytes((int)image.ContentLength);
                return imageBytes;
            }
    


    Conocuica

    • Marcado como respuesta conocuica domingo, 21 de abril de 2019 17:22
    domingo, 21 de abril de 2019 17:11

Todas las respuestas

  • El primer paso es trasvasar el HttpPostedFileBase que te llega en el Post a un array de bytes. Por ejemplo:

    int fileSize = imgpro.ContentLength;
    byte[] bytesDelFichero = new byte[fileSize];
    imgpro.InputStream.Read(bytesDelFichero, 0, fileSize);
    

    Después de eso, en la variable bytesDelFichero tienes ya los bytes que hay que grabar en la base de datos. La forma de grabarlos depende de cómo tengas configuradas tus rutinas de acceso a datos, ya que será distinto según estés generando sentencias con ADO.NET, o usando DataTables con DataAdapters, o usando Entity Framework, etc., etc. Pero en todos los casos las sentencias de grabación en base de datos son exactamente las mismas que habrías usado en una aplicación de escritorio, y dado que afirmas que el sistema ya lo tenías trabajando en Windows, cabe presumir que ya tienes escritas dichas sentencias en el sistema antiguo.


    domingo, 21 de abril de 2019 15:34
  • Si muchas gracias ya lo resolvi

            // POST: Producto/Create
            [HttpPost]
            public ActionResult Create(ParProducto ParProducto)
            {
                try
                {
                    if (Session["usuario"] == null)
                    {
                        return RedirectToAction("Login", "Inicio");
                    }
    
                    HttpPostedFileBase imgpro = Request.Files["imgpro"];
                    if (imgpro != null && imgpro.ContentLength > 0)
                    {
    
                    }
    
                    ParUsuario u = null;
                    u = (ParUsuario)Session["usuario"];
                    ParProducto.usuariocorto = u.usuariocorto;
    
                    System.Globalization.CultureInfo customCulture = new System.Globalization.CultureInfo("en-US", true);
                    customCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd h:mm tt";
                    System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
                    System.Threading.Thread.CurrentThread.CurrentUICulture = customCulture;
                    DateTime newDate = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd h:mm tt"));
    
    
                    ParProducto.Fecharegistro = newDate;
                   ParProducto .ParProductoImagen = ConvertToBytes(imgpro);
                    int regreso = ProductoBL.Agregar(ParProducto);
    
                    return View("Confirma");
                }
                catch
                {
                    return View("Error");
                }
            }
    
    
            public byte[] ConvertToBytes(HttpPostedFileBase image)
            {
                byte[] imageBytes = null;
                BinaryReader reader = new BinaryReader(image.InputStream);
                imageBytes = reader.ReadBytes((int)image.ContentLength);
                return imageBytes;
            }
    


    Conocuica

    • Marcado como respuesta conocuica domingo, 21 de abril de 2019 17:22
    domingo, 21 de abril de 2019 17:11