none
Guardar Archivo de diferente formato en BD Tipo Varbinary RRS feed

  • Pregunta

  • Hola, disculpen nuevamente una pregunta tengo un archivo que recibo en el controlador atravez de un HttpPostedFileBase, pero ahora necesito convertirlo en array de bites para guardarlo en varbinary en base de datos.

    Antes guardaba en base de datos a travez de la ruta de un archivo ejem: c//exaple//archivo.extension, pero resulta que me sera imposible obtener la ruta si el archivo sera cargado desde un equipo y se recibe en el servidor.

    opte por cambiar de forma y pasarlo en un submit:

    Me podrian decir, si alguna de estas propiedades me sirve para guardar en base de datos el archivo como varbinary

    En la ultima me aparece el error, si no es molestia espero puedan ayudarme

    domingo, 6 de diciembre de 2015 6:41

Respuestas

  • No acabo de entender bien. Dices que quieres guardarlo en un campo varbinary en base de datos, pero el código que pones intenta guardar el archivo en disco.

    Por otro lado el error que te da es porque la ruta de acceso no es correcta. ¿Qué valor tiene fileName en el momento que te da el error?

    Estaría bien poder ver el código completo, pero si el valor de fileName lo estás obteniendo de file.FileName tienes que tener en cuenta que esta propiedad no tiene sólo el nombre del archivo, si no la ruta completa del archivo en el cliente.

    Puedes obtener el nombre del archivo a partir del path con Path.GetFileName:

    string fileName = Path.GetFileName(file.FileName);


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 6 de diciembre de 2015 9:38
  • >>el cual contiene un campo de tipo varbinary[max], pero no se como guardarlo

    cuando guardas en un campo varbinary el tipo de archivo no importa, porque todo va a ser un array de byte

    [ASP.NET] Grabar Archivo en base de datos

    si se que dice asp.net, pero analiza la capa de datos, alli explico como realizar el insert del byte[] de la imagenque se sube al servidor

    notaras que hay un campo extra para definir la extension del archivo, de esta forma conoces que se esta grabando alli

    >>es mas no se si lo que postee en las imagenes puede guardar la imagen en la base.

    para saber que imagen se guarda registras el nombre y la extension

    >>Porque si nos ponemos a pensar la ruta no me sirve, ya que cuando llegue al servidor intentara buscar la ruta y no la encontrara

    Pero si grabas el archivo en una ruta definida dentro del sitio web podrias recuperalo despues de ese lugar

    o sea defines dentro del sitio una carpeta como ser

    string ruta = Server.MapPath("~/archivos");

    Entonces cuando se sube una imagen grabas alli en esa carpeta

    En la db registras el nombre solamente

    Cuando se quiera recuperar deberias rearmar la ruta, tomando el nombre de la db y poniendo la ruta fija dentro del servidor para asi recuperarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de diciembre de 2015 10:28

Todas las respuestas

  • No acabo de entender bien. Dices que quieres guardarlo en un campo varbinary en base de datos, pero el código que pones intenta guardar el archivo en disco.

    Por otro lado el error que te da es porque la ruta de acceso no es correcta. ¿Qué valor tiene fileName en el momento que te da el error?

    Estaría bien poder ver el código completo, pero si el valor de fileName lo estás obteniendo de file.FileName tienes que tener en cuenta que esta propiedad no tiene sólo el nombre del archivo, si no la ruta completa del archivo en el cliente.

    Puedes obtener el nombre del archivo a partir del path con Path.GetFileName:

    string fileName = Path.GetFileName(file.FileName);


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 6 de diciembre de 2015 9:38
  • Hola Asier Villanueva,

    Gracias y si es lo que tengo duda, yo no necesito guardar el archivo en disco o servidor, lo necesito guardar en un servidor de BD,, el cual contiene un campo de tipo varbinary[max], pero no se como guardarlo, es mas no se si lo que postee en las imagenes puede guardar la imagen en la base.

    Porque si nos ponemos a pensar la ruta no me sirve, ya que cuando llegue al servidor intentara buscar la ruta y no la encontrara 

    domingo, 6 de diciembre de 2015 15:48
  • Tienes dos opciones:

    - guardar el archivo en disco (para lo que tendrías que introducir el cambio que te comentaba arriba) y guardar en la base de datos la ruta del archivo.
    Para recuperarlo tendrías que leer la ruta de la base de datos, leer el archivo de la ruta recuperada y devolver el contenido.

    - guardar el archivo en base de datos.
    Para recuperarlo tendrías que leer el contenido del archivo de la base de datos y devolver este contenido.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 6 de diciembre de 2015 22:00
  • >>el cual contiene un campo de tipo varbinary[max], pero no se como guardarlo

    cuando guardas en un campo varbinary el tipo de archivo no importa, porque todo va a ser un array de byte

    [ASP.NET] Grabar Archivo en base de datos

    si se que dice asp.net, pero analiza la capa de datos, alli explico como realizar el insert del byte[] de la imagenque se sube al servidor

    notaras que hay un campo extra para definir la extension del archivo, de esta forma conoces que se esta grabando alli

    >>es mas no se si lo que postee en las imagenes puede guardar la imagen en la base.

    para saber que imagen se guarda registras el nombre y la extension

    >>Porque si nos ponemos a pensar la ruta no me sirve, ya que cuando llegue al servidor intentara buscar la ruta y no la encontrara

    Pero si grabas el archivo en una ruta definida dentro del sitio web podrias recuperalo despues de ese lugar

    o sea defines dentro del sitio una carpeta como ser

    string ruta = Server.MapPath("~/archivos");

    Entonces cuando se sube una imagen grabas alli en esa carpeta

    En la db registras el nombre solamente

    Cuando se quiera recuperar deberias rearmar la ruta, tomando el nombre de la db y poniendo la ruta fija dentro del servidor para asi recuperarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de diciembre de 2015 10:28
  • He marcado respuestas. Si ves que no cumplen con tu solución desmarcalas y coméntanos un poco más de tu problema  para ayudarte. Gracias

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 9 de diciembre de 2015 9:42
    Moderador