none
¿como guardar y descargar un archivo imagen de la base de datos ASP.NET MVC 4 ? RRS feed

  • Pregunta


  •  Deseo saber como es la manera correcta de guardar una imagen (jpg,png,gif ) en la base de datos en bytes. Y cual es la manera correcta de descargar la misma desde base de datos. O es obligatorio guardarlo en una carpeta del servidor.

     El problema es que cuando descargo el archivo se guarda un tipo de archivo desconocido con una banderita de window como si no estuviera definido la extensión del archivo que se registro en la base de datos.

    Todos los métodos mostrados funcionan.

    Mi método registrar que guarda la imagen.

    public JsonResult registrarTicket(Ticket ticket)
            {
                HttpPostedFileBase filebase = Request.Files[0];
                WebImage image = new WebImage(filebase.InputStream);
                ticket.Imagen = image.GetBytes();
                ticket.Fecha_Reg = DateTime.Now;
                ticket.Area = "DESARROLLO";
                ticket.Est_ticket = "Registrado";
                ticket.Flag_est = true;
    
                this._repo.Agregar(ticket);
                this._repo.Guardar();
                return Json(new { data = true }, JsonRequestBehavior.AllowGet);
            }

    Mi método para descargar la imagen

    public JsonResult obtenerImagen(int numTicket)
            {
                var obj = _repo.TraerUno(numTicket);
                byte[] imagen = obj.Imagen;
                Session["Archivo"] = imagen;
                return Json(new { data = true }, JsonRequestBehavior.AllowGet); ;
            }
    
            public FileResult descargar()
            {
                var ms = Session["Archivo"] as byte[];
                //var filename = string.Format("Imagen{0:yyyyMMdd_hhmmss}", DateTime.Now);
                var cadena = Encoding.UTF8.GetString(ms);
                return File(ms, MediaTypeNames.Application.Octet, cadena);
    
            }

    Estoy trabajando con ajax

    descargar: function () {
                var ticketId = $("#Num_ticket").val();
                $.ajax({
                    url: "../Ticket/obtenerImagen",
                    type: "GET",
                    dataType: "json",
                    data: { numTicket: ticketId},
                    success: function (result) {
                        window.location = "../Ticket/descargar";
                    }, error: function (err) {
                        console.log(err);
                    }
                })
            },

    Además deseo saber si es posible guardar un archivo de cualquier tipo de extensión(Ejemplo: xls,jpg,txt) y descargarlo sin tener que especificar una extensión en particular.

    lunes, 10 de agosto de 2020 20:45

Respuestas

  • Tienes un error en la "cadena" que le pasas a esta línea:

                return File(ms, MediaTypeNames.Application.Octet, cadena);

    Ese parámetro indica el nombre del fichero. Pero estás intentando construirlo en la línea anterior a partir del contenido del fichero. Dicho contenido es un binario que contiene los pixels de la imagen. Lógicamente dará lugar a un nombre completamente incoherente si lo conviertes a UTF8.

    Asegúrate de ponerle un nombre consistente con las imágenes que estás salvando. Por ejemplo, si tus imágenes son .jpg, puedes hacer esto:

    return File(ms, MediaTypeNames.Application.Octet, "Imagen1.jpg");

    y eso te devolverá un archivo "razonable".

    Ten presente que el nombre "Imagen1") y el tipo (.jpg) los tienes que saber tú, ya que no los estás salvando en la base de datos (y no, no forman parte de los bytes de la imagen; si los quisieras conservar tendrías que añadir campos adicionales en la tabla y guardar en ellos estos datos).

    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:29
    martes, 11 de agosto de 2020 5:57

Todas las respuestas

  • Tienes un error en la "cadena" que le pasas a esta línea:

                return File(ms, MediaTypeNames.Application.Octet, cadena);

    Ese parámetro indica el nombre del fichero. Pero estás intentando construirlo en la línea anterior a partir del contenido del fichero. Dicho contenido es un binario que contiene los pixels de la imagen. Lógicamente dará lugar a un nombre completamente incoherente si lo conviertes a UTF8.

    Asegúrate de ponerle un nombre consistente con las imágenes que estás salvando. Por ejemplo, si tus imágenes son .jpg, puedes hacer esto:

    return File(ms, MediaTypeNames.Application.Octet, "Imagen1.jpg");

    y eso te devolverá un archivo "razonable".

    Ten presente que el nombre "Imagen1") y el tipo (.jpg) los tienes que saber tú, ya que no los estás salvando en la base de datos (y no, no forman parte de los bytes de la imagen; si los quisieras conservar tendrías que añadir campos adicionales en la tabla y guardar en ellos estos datos).

    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:29
    martes, 11 de agosto de 2020 5:57
  • Hola Joaquin MB, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    martes, 11 de agosto de 2020 14:54
    Moderador