none
guadar todo el contenido de carpeta de mi sitio en una bd desde asp.net RRS feed

  • Pregunta

  • saludos como puedo guardar todas las imagenes contenidas en una carpeta en la base de datos sin necesidad que el usuario la selecione solo necesito que tenga como una boton que diga guardar y se haga el proceso "por debajo" con tan solo un click

    la carpeta es parte del sitio web

    sábado, 8 de junio de 2013 23:35

Respuestas

  • Estimado Augusto C

    Si la carpeta esta en el servidor o sea "es parte del sitio web", simplemente debes recorrar los archivos de dicha carpeta ir leyendo archivo por arhivo y insertarlo en la DB mediante tu capa de acceso a datos

    Ahora bien, enlaces que te pueden ayudar...

    Lo que no se es como implementas tu capa de acceso a datos... una vez que tienes la imagen deberias leer los bytes de la misma e insertarlos en las tablas correspondientes

    En que te podemos ayudar especificamente

    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    domingo, 9 de junio de 2013 0:32
  • Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click 'string[] filePaths = Directory.GetFiles(@"c:\MyDir\"); Dim filePaths As String() filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes") 'Dim cont As Integer For Each fi As String In filePaths Dim file1() As Byte = File.ReadAllBytes(fi) Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString()) conn.Open() Dim query As String = "INSERT INTO Imagenes ( imagen) " & _ "VALUES (@name, @length, @imagen)" Dim cmd As New SqlCommand(query, conn) cmd.Parameters.AddWithValue("@name", fi)

    cmd.Parameters.AddWithValue("@length", file1.Length)

    cmd.Parameters.AddWithValue("@imagen", file1) cmd.ExecuteNonQuery() End Using Next End Sub

    Tenias mal asignado el parametro , realizalo como indico arriba ok??

     imageParam.Value = file1() --> no puedes asignar file1() sin el indice, se asigna el array completo

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


    domingo, 9 de junio de 2013 17:43
    Moderador
  • Error 1 Number of indices is less than the number of dimensions of the indexed en file1

    porque usas

     imageParam.Value = file1()

    si solo debes usar

     imageParam.Value = file1

    para que los (),  estan de mas


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 9 de junio de 2013 17:48

Todas las respuestas

  • Estimado Augusto C

    Si la carpeta esta en el servidor o sea "es parte del sitio web", simplemente debes recorrar los archivos de dicha carpeta ir leyendo archivo por arhivo y insertarlo en la DB mediante tu capa de acceso a datos

    Ahora bien, enlaces que te pueden ayudar...

    Lo que no se es como implementas tu capa de acceso a datos... una vez que tienes la imagen deberias leer los bytes de la misma e insertarlos en las tablas correspondientes

    En que te podemos ayudar especificamente

    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    domingo, 9 de junio de 2013 0:32
  • hola

    si las imagenes ya estan en el servidor solo usarias

    File.ReadAllLines()

    para asignar el contenido al parametro del query que inserte la imagen en la db

     [ASP.NET] - Guardar Imagen base de datos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 2:09
  • hola

    si las imagenes ya estan en el servidor solo usarias

    File.ReadAllLines()

    para asignar el contenido al parametro del query que inserte la imagen en la db

     [ASP.NET] - Guardar Imagen base de datos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    No te entendi nada.

    yo necesito guadar la imagen en la bd

    • Editado Augusto C domingo, 9 de junio de 2013 2:45
    domingo, 9 de junio de 2013 2:38
  • pues eso es justametne lo que plantea el articulo, lo cual veo que no has revisado

    analiza la parte de perssitencia que alli se utiliza

    solo que en tu caso no realizaras ningun upload de la imagen proque ya esta en el servidor

    solo la tomaras por medio del File.ReadAllBytes() y la volcaras al parametro

    Nota: en la respuesta anterio confundi el metodo no es ReadAllLines es ReadAllBytes


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 2:57
  • pues eso es justametne lo que plantea el articulo, lo cual veo que no has revisado

    analiza la parte de perssitencia que alli se utiliza

    solo que en tu caso no realizaras ningun upload de la imagen proque ya esta en el servidor

    solo la tomaras por medio del File.ReadAllBytes() y la volcaras al parametro

    Nota: en la respuesta anterio confundi el metodo no es ReadAllLines es ReadAllBytes


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola aunque no  te lo parezca , tu artìculo es el primero que leì cuando comenzo este requerimeinto

    Tu articulo según veo esta dividido en dos partes

    una del upload que sube imagenes a una carpeta del servidor,

    la otra que hace un insert en la base de datos pero utilizando el control FileUpload seleccionan imagen una por una desde algun directorio.

    Bueno yo necesito hacer un insert masivo desde una o de todos los archivos,que estan en una ruta ,insertando nombre,y porsupuesto imagen

    Por favor mapeame donde esta eso en tu extenso articulo porque ya me canse de buscarlo

    gracias


    • Editado Augusto C domingo, 9 de junio de 2013 3:12
    domingo, 9 de junio de 2013 3:11

  • veo que no lees lo que comento, lo remarco:

    solo que en tu caso no realizaras ningun upload de la imagen proque ya esta en el servidor

    solo la tomaras por medio del File.ReadAllBytes() y la volcaras al parametro

    tieness que tomas las idea y unirlas, grabas en la db como en el articulo

    pero tomas los archivos con el ReadAllByte, porque no necesitas de un upload


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 3:17

  • veo que no lees lo que comento, lo remarco:

    solo que en tu caso no realizaras ningun upload de la imagen proque ya esta en el servidor

    solo la tomaras por medio del File.ReadAllBytes() y la volcaras al parametro

    tieness que tomas las idea y unirlas, grabas en la db como en el articulo

    pero tomas los archivos con el ReadAllByte, porque no necesitas de un upload


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Leo tus comentarios ,solo que no los entiendo

    en que parte va esto del File.ReadAllBytes

    si tu codigo del guardar que llama la clase dal va asi

    	Protected Sub btnGuardar_Click(sender As Object, e As EventArgs)
    
                'File.ReadAllBytes()
    			If FileUpload1.HasFile Then
    				Using reader As New BinaryReader(FileUpload1.PostedFile.InputStream)
    					Dim image As Byte() = reader.ReadBytes(FileUpload1.PostedFile.ContentLength)
    
    
    					ImagenesDAL.GuardarImagen(FileUpload1.FileName, FileUpload1.PostedFile.ContentLength, image)
    				End Using
    
    				CargarListadImagenes()
    			End If
    
    
    		End Sub

    dde donde sale el FILE, si nisiquiera esta instanciado

    ????????????????????

    domingo, 9 de junio de 2013 3:26
  • en que parte va esto del File.ReadAllBytes si tu codigo del guardar que llama la clase dal va asi

    tienes que olvidate del fileupload y todo ese codigo, del link solo revisa el codigo de la capa de datos y descarta todo el resto

    entonces el ReadAllByte lo usas en el momento que tomas el archivo de la carpeta y se lo pasasa a persistencia para que inserte

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 3:57
  • mmm.podrias ponerme un ejemplo de ese codigo??
    domingo, 9 de junio de 2013 4:03
  • de que codigo ?

    es usar un metodo ReadAllByte(),  he implementar un INSERT

    porque no pones lo que has intentado y sobre eso aplciamos las correcciones


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 5:25
  • No se ni como empezar

    esto no sirve

       

        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            FileSystem.ReadAllBytes("D:/ProyectoGTU/ReadAllbyte/Imagenes")
        End Sub

    con esats librerías no me reconoce la ruta

    Imports

    System.IO


    Imports

    Microsoft.VisualBasic.FileIO

    domingo, 9 de junio de 2013 10:10
  • pero estas leyendo un archivo que ni siquiera asignas a nada, como esperas comenzar con eso

    estas leyendo un archivo no una carpeta

    Dim file() As Byte = FileSystem.ReadAllBytes("D:\ProyectoGTU\ReadAllbyte\Imagenes\arch.jpg")

    para conocer las imagens sua lo que comento Jose. con el Directory.GetFiles()

    entonces podras conocer los archivos y recorrelos en un For Each

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 13:10
  • no me sale

        Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click
            'string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
            Dim filePaths As String()
            filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes")
            For Each fi As String In filePaths
    
            Next
        End Sub

    domingo, 9 de junio de 2013 13:48
  • el decir "no me sale" no ayuda

    muestras el codigo pero no comentas nada si es que obtienes algun error, o simplemente si pones un breakpoint no recore el for each

    si pones breakpoint he inspeccionas las variables que puedes observar

    recuerda que el path es con \, no con /, es un path fisico el que defines

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 13:51
  • yo quiero recorrer todos los archivos pero no se como ,con ese código no me sale

    por favor indicame como puedo hacer el for each para recorrer cada elemento

    domingo, 9 de junio de 2013 14:00
  • pero es con ese codigo, no hay otro codigo

    lo que pones es correcto, pero debes decir que es ese "no me sale", usa breakpoint en el codigo y evalua las variables y ver que contenido tienes

    por algo de tu parte para poder resolver el problema, desded aqui podemos indicar el camino pero despues depende de ti

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 14:09
  • ya puse el break point veo que solo entra una vez y de ahí se sale de l foreach

    el problema esque tengo poco tiempo y mucha presión ,no tengo tiempo para estar analizando demasiado necesito cosas que funcionen

    domingo, 9 de junio de 2013 14:20
  • ya puse el break point veo que solo entra una vez y de ahí se sale de l foreach

    has puesto algun try...catch para ver sino sale por un error ?

    porque si la variable filePaths muestra varios items el foeach deberia recorrerlos a todos

    el problema esque tengo poco tiempo y mucha presión

    pues no eres ni seran el ultimo que tiene que trabjar con presion y poco tiempo, eso es normal en sistemas

    aqui no hay soluciones magicas, sino analisas no detectaras el problema y si esto te lleva tiempo entonces tendras que invertir el que haga falta, remarco magia no se puede hacer para solucionar un problema

    desarollar es un proceso analitico que requiere ir analisando y descartando hasta entender la causa

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 14:46
  • No la presión que yo tengo

    Yo se que esto es una rutina básica solo que yo no estoy muy familiarizado con los objetos que aquí se usan,

    para comenzar con este foreach solo estoy recorriendo los archivos ni siquiera se como voy a guardarlos como imagen , bueno me dijeron con el file.readallbytes.

    Es por eso que pido ayuda , denme una mano técnica

    sin tanto consejo de vida

    gracias

    domingo, 9 de junio de 2013 14:56
  • ni siquiera se como voy a guardarlos como imagen , bueno me dijeron con el file.readallbytes.

    si tienes el path al archivo solo haces

    For Each fi As String In filePaths Dim file() As Byte = File.ReadAllBytes(fi)

    'aqui invocas a la capa de datos para pasarle el byte array

    Next

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 15:17
  • claro eso hice 
       Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click
            'string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
            Dim filePaths As String()
            filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes")
            'Dim cont As Integer
            For Each fi As String In filePaths
                File.ReadAllBytes(fi)
    
            Next
        End Sub

    domingo, 9 de junio de 2013 15:35
  • que tipo de parámetro de be ser
        Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click
            'string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
            Dim filePaths As String()
            filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes")
            'Dim cont As Integer
            For Each fi As String In filePaths
                Dim file1() As Byte = File.ReadAllBytes(fi)
                Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
                    conn.Open()
    
                    Dim query As String = "INSERT INTO Imagenes ( imagen) " & _
                                            "VALUES (@name, @length, @imagen)"
    
                    Dim cmd As New SqlCommand(query, conn)
    
    
                    Dim imageParam As SqlParameter = cmd.Parameters.Add("@imagen", System.Data.SqlDbType.Image)
                    imageParam.Value = file1()
    
    
                    cmd.ExecuteNonQuery()
                End Using
    
            Next
        End Sub

    domingo, 9 de junio de 2013 15:45
  • bien ahora va tomando forma

    el parametro de la imagen esta correcto, pero te faltan definir los otros dos

    ademas de usar el

    cmd.Parameters.Add(imageParam)

    sino agregas el aprametro a la coleccion esta nunca se entera que lo defines

    para los otros parametros podrias usar el

    Dim info As New FileInfo(fi)
    
    cmd.Parameters.AddWithValue("@name", info.Name)
    cmd.Parameters.AddWithValue("@length", info.Length)


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 9 de junio de 2013 15:51
  • así como lo he puesto me marca el error en

     

    Dim imageParam As SqlParameter = cmd.Parameters.Add("@imagen", System.Data.SqlDbType.Image)
    
                    imageParam.Value = file1()

    Error 1 Number of indices is less than the number of dimensions of the indexed
    en file1
    • Editado Augusto C domingo, 9 de junio de 2013 16:16
    domingo, 9 de junio de 2013 16:16
  •  Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click
            'string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
            Dim filePaths As String()
            filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes")
            'Dim cont As Integer
            For Each fi As String In filePaths
                Dim file1() As Byte = File.ReadAllBytes(fi)
                Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
                    conn.Open()
    
                    Dim query As String = "INSERT INTO Imagenes ( imagen) " & _
                                            "VALUES (@name, @length, @imagen)"
    
                    Dim cmd As New SqlCommand(query, conn)
    
    
    
                    Dim imageParam As SqlParameter = cmd.Parameters.Add("@imagen", System.Data.SqlDbType.Image)
                    imageParam.Value = file1()
    
    
                    cmd.ExecuteNonQuery()
                End Using
    
            Next
        End Sub

    He stado elaborado el codigo que muestro lineas arriba

    Error 1 Number of indices is less than the number of dimensions of the indexed array.

    cual seria la forma correcta

    domingo, 9 de junio de 2013 16:49
  • Protected Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLeer.Click 'string[] filePaths = Directory.GetFiles(@"c:\MyDir\"); Dim filePaths As String() filePaths = Directory.GetFiles("d:/ProyectoGTU/ReadAllbyte/ReadAllbyte/Imagenes") 'Dim cont As Integer For Each fi As String In filePaths Dim file1() As Byte = File.ReadAllBytes(fi) Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString()) conn.Open() Dim query As String = "INSERT INTO Imagenes ( imagen) " & _ "VALUES (@name, @length, @imagen)" Dim cmd As New SqlCommand(query, conn) cmd.Parameters.AddWithValue("@name", fi)

    cmd.Parameters.AddWithValue("@length", file1.Length)

    cmd.Parameters.AddWithValue("@imagen", file1) cmd.ExecuteNonQuery() End Using Next End Sub

    Tenias mal asignado el parametro , realizalo como indico arriba ok??

     imageParam.Value = file1() --> no puedes asignar file1() sin el indice, se asigna el array completo

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


    domingo, 9 de junio de 2013 17:43
    Moderador
  • Error 1 Number of indices is less than the number of dimensions of the indexed en file1

    porque usas

     imageParam.Value = file1()

    si solo debes usar

     imageParam.Value = file1

    para que los (),  estan de mas


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 9 de junio de 2013 17:48