none
pegando arquivo que está no banco e salvando no pc RRS feed

  • Pergunta

  • olá!
    tenho um arquivo .htm que está zipado dentro do banco no campo blob(ou seja esta .zip)
    eu preciso pegá-lo desse campo e coloca-lo em algum diretorio ai depois eu vou chamar uma função minha aqui que eu tenho que descompacta e abre ele.
    mas o que nao sei mesmo é como pegar o arquivo do banco e copiar para algum diretorio por exemplo c:
    useis uns codigos aqui em vb mas só serve para ler o arquivo:
    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim con As New FbConnection("Server=192.168.0.103;User=SYSDBA;Password=masterkey;Database=C:\DOCS.GDB")
    Dim da As New FbDataAdapter("SELECT PPRA.DOCSPPRA FROM PPRA where PPRA.idppra = 2", con)
    Dim MyCB As FbCommandBuilder = New FbCommandBuilder(da)
    Dim ds As New DataSet()

    con.Open()
    da.Fill(ds, "PPRA")
    Dim myRow As DataRow
    myRow = ds.Tables("PPRA").Rows(0)

    Dim MyData() As Byte
    MyData = myRow("DOCSPPRA")

    Response.Buffer = True
    Response.ContentType = "Image/JPEG"
    Response.BinaryWrite(MyData)

    MyCB = Nothing
    ds = Nothing
    da = Nothing

    con.Close()
    con = Nothing
    End Sub

    alguma ideia?
    quinta-feira, 18 de outubro de 2007 13:09

Respostas

  • consegui

    fiz uma função que pega o arquivo do banco e joga num diretorio:

    private void LerArquivo(string DestFilePath)
        {
            try
            {
                int PictureCol = 0; // the column # of the BLOB field
                FbCommand cmd = new FbCommand("SELECT", Doc);
                Doc.Open();
                FbDataReader dr = cmd.ExecuteReader();
                dr.Read();
                Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];
                dr.GetBytes(PictureCol, 0, b, 0, b.Length);
                dr.Close();
                Doc.Close();
                System.IO.FileStream fs =
                 new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);

                fs.Write(b, 0, b.Length);
                fs.Close();
            }
            catch
            {
                Session["Erro"] = "Erro";
                Response.Redirect("~/Paginas/Home.aspx");
            }

        }

    e outra que le este arquivo e abre:

    private void AbreArquivo()
        {
            string caminho = @"C:\PG.htm";
            FileInfo file = new FileInfo(caminho);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(file.FullName);
            Response.End();
        }
    sexta-feira, 19 de outubro de 2007 10:38
  • Giovanni, bom dia.

    Não sei se já conseguiu resolver, se não conseguiu.....
    tenho um aplicativo bem similar que desenvolvi....

    --> Quanto ao diretório:

    Primeiro criei um teste para verificar se existe a pasta... estou salvando dentro do "C:\temp"

    Public

     

    Sub

    TestarPasta()

     

    If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True

    Then

    Pasta =

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

    Else

     

    Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"

    )

    Pasta =

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

    End

    If

     

    End

    Sub

     

    --> Quanto a buscar o arquivo:

    Após criar a consulta e a conexão, conforme você criou, utilizei a função abaixo para fazer download para a pasta...

    conection.Open()

    da.Fill(ds,

    "T_Anexos"

    )

     

    Dim myRow As

    DataRow

    myRow = ds.Tables(

    "T_Anexos"

    ).Rows(0)

     

    Dim MyData() As

    Byte

    MyData = myRow(

    "Anexo"

    )

     

    Dim K As

    Long

    K = UBound(MyData)

     

    Dim fs As New FileStream(Pasta & "/"& "COLOQUE AQUI A VARIAVEL COM O NOME DO ARQUIVO E EXTENSÃO" , FileMode.OpenOrCreate, FileAccess

    .Write)

    fs.Write(MyData, 0, K)

    fs.Close()

    fs =

    Nothing

    MyCB =

    Nothing

    ds =

    Nothing

    da =

    Nothing

    conection.Close()

     

    Se achar relevante para o que está fazendo, utilizo a função abaixo para abrir o arquivo que foi baixado:

     

    Dim

     

     

    appString As String = Pasta & "/"

    & "VARIAVEL COM O NOME DO ARQUIVO"

    System.Diagnostics.

     

    Process.Start(appString)

     

     

    Espero que ajude.

     
    terça-feira, 1 de novembro de 2011 13:32

Todas as Respostas

  • consegui

    fiz uma função que pega o arquivo do banco e joga num diretorio:

    private void LerArquivo(string DestFilePath)
        {
            try
            {
                int PictureCol = 0; // the column # of the BLOB field
                FbCommand cmd = new FbCommand("SELECT", Doc);
                Doc.Open();
                FbDataReader dr = cmd.ExecuteReader();
                dr.Read();
                Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];
                dr.GetBytes(PictureCol, 0, b, 0, b.Length);
                dr.Close();
                Doc.Close();
                System.IO.FileStream fs =
                 new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);

                fs.Write(b, 0, b.Length);
                fs.Close();
            }
            catch
            {
                Session["Erro"] = "Erro";
                Response.Redirect("~/Paginas/Home.aspx");
            }

        }

    e outra que le este arquivo e abre:

    private void AbreArquivo()
        {
            string caminho = @"C:\PG.htm";
            FileInfo file = new FileInfo(caminho);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(file.FullName);
            Response.End();
        }
    sexta-feira, 19 de outubro de 2007 10:38
  • Giovanni, bom dia.

    Não sei se já conseguiu resolver, se não conseguiu.....
    tenho um aplicativo bem similar que desenvolvi....

    --> Quanto ao diretório:

    Primeiro criei um teste para verificar se existe a pasta... estou salvando dentro do "C:\temp"

    Public

     

    Sub

    TestarPasta()

     

    If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True

    Then

    Pasta =

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

    Else

     

    Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"

    )

    Pasta =

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

    End

    If

     

    End

    Sub

     

    --> Quanto a buscar o arquivo:

    Após criar a consulta e a conexão, conforme você criou, utilizei a função abaixo para fazer download para a pasta...

    conection.Open()

    da.Fill(ds,

    "T_Anexos"

    )

     

    Dim myRow As

    DataRow

    myRow = ds.Tables(

    "T_Anexos"

    ).Rows(0)

     

    Dim MyData() As

    Byte

    MyData = myRow(

    "Anexo"

    )

     

    Dim K As

    Long

    K = UBound(MyData)

     

    Dim fs As New FileStream(Pasta & "/"& "COLOQUE AQUI A VARIAVEL COM O NOME DO ARQUIVO E EXTENSÃO" , FileMode.OpenOrCreate, FileAccess

    .Write)

    fs.Write(MyData, 0, K)

    fs.Close()

    fs =

    Nothing

    MyCB =

    Nothing

    ds =

    Nothing

    da =

    Nothing

    conection.Close()

     

    Se achar relevante para o que está fazendo, utilizo a função abaixo para abrir o arquivo que foi baixado:

     

    Dim

     

     

    appString As String = Pasta & "/"

    & "VARIAVEL COM O NOME DO ARQUIVO"

    System.Diagnostics.

     

    Process.Start(appString)

     

     

    Espero que ajude.

     
    terça-feira, 1 de novembro de 2011 13:32