none
É Possivel pegar uma imagem gravada no banco e gerar um arquivo da mesma??? RRS feed

  • Pergunta

  • Boa tarde amigos, o meu sistema salva as imagens no banco, o banco é Firebird e o campo da tabela é tipo Blob, gostaria de saber se tem como eu criar um arquivo em disco da imagem que esta no banco... alguem já fez ou viu alguma coisa parecida??


    []'s
    quarta-feira, 2 de abril de 2008 20:01

Respostas

  • guilherme,

     

    Um exemplo em C#

    http://www.codeproject.com/KB/web-image/PicManager.aspx

     

    Um exemplo em VB.NET

     

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

     

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

    'referência imagem

    Imports System.IO

    Imports System.IO.Path

    Imports System.Drawing

     

    Private Sub ImprimirImagem()

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataSet As New dsProductPhoto

    Try

    '2 passo: passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

     

    'carregando os dados

    strSQL.Append(" SELECT ")

    strSQL.Append(" ProductPhotoID, ")

    strSQL.Append(" LargePhoto, ")

    strSQL.Append(" LargePhotoFileName ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.ProductPhoto")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oDataSet, "ProductPhoto")

     

    '

    'carregando uma imagem do banco de dados

    '

    '

    Dim strImgTmp As String = String.Concat(Server.MapPath("~\tmp"), "\AWoksTmpImg") 'arquivo temporário da imagem

     

    'lendo a imagem do datatable

    Dim imgArray() As Byte = CType(oDataSet.Tables("ProductPhoto").Rows(0).Item("LargePhoto"), Byte())

    Dim ArraySize As Integer = imgArray.GetUpperBound(0)

     

    'gravando a imagem no disco

    Dim fsSave As New FileStream(strImgTmp, FileMode.OpenOrCreate, FileAccess.Write)

    fsSave.Write(imgArray, 0, ArraySize + 1)

     

    'liberando o objeto

    fsSave.Close()

    fsSave.Dispose()

    fsSave = Nothing

    imgArray = Nothing

     

    'convertendo a imagem para o formato BMP

    Dim objBmp As New Bitmap(strImgTmp)

    objBmp.Save(String.Concat(strImgTmp, ".bmp"), Imaging.ImageFormat.Bmp)

     

    'liberando o objeto

    objBmp.Dispose()

    objBmp = Nothing

     

    'removendo os arquivos temporários

    'File.Delete(strImgTmp)

    'File.Delete(String.Concat(strImgTmp, ".bmp"))

     

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'fechando a conexão com o banco de dados

    oConn.Close()

    'liberando os objetos

    oConn.Dispose()

    oDataSet.Dispose()

    oConn = Nothing

    oDataSet = Nothing

    End Try

    End Sub

     

     


    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    quarta-feira, 2 de abril de 2008 23:41

Todas as Respostas

  • guilherme,

     

    Um exemplo em C#

    http://www.codeproject.com/KB/web-image/PicManager.aspx

     

    Um exemplo em VB.NET

     

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

     

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

    'referência imagem

    Imports System.IO

    Imports System.IO.Path

    Imports System.Drawing

     

    Private Sub ImprimirImagem()

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataSet As New dsProductPhoto

    Try

    '2 passo: passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

     

    'carregando os dados

    strSQL.Append(" SELECT ")

    strSQL.Append(" ProductPhotoID, ")

    strSQL.Append(" LargePhoto, ")

    strSQL.Append(" LargePhotoFileName ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.ProductPhoto")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oDataSet, "ProductPhoto")

     

    '

    'carregando uma imagem do banco de dados

    '

    '

    Dim strImgTmp As String = String.Concat(Server.MapPath("~\tmp"), "\AWoksTmpImg") 'arquivo temporário da imagem

     

    'lendo a imagem do datatable

    Dim imgArray() As Byte = CType(oDataSet.Tables("ProductPhoto").Rows(0).Item("LargePhoto"), Byte())

    Dim ArraySize As Integer = imgArray.GetUpperBound(0)

     

    'gravando a imagem no disco

    Dim fsSave As New FileStream(strImgTmp, FileMode.OpenOrCreate, FileAccess.Write)

    fsSave.Write(imgArray, 0, ArraySize + 1)

     

    'liberando o objeto

    fsSave.Close()

    fsSave.Dispose()

    fsSave = Nothing

    imgArray = Nothing

     

    'convertendo a imagem para o formato BMP

    Dim objBmp As New Bitmap(strImgTmp)

    objBmp.Save(String.Concat(strImgTmp, ".bmp"), Imaging.ImageFormat.Bmp)

     

    'liberando o objeto

    objBmp.Dispose()

    objBmp = Nothing

     

    'removendo os arquivos temporários

    'File.Delete(strImgTmp)

    'File.Delete(String.Concat(strImgTmp, ".bmp"))

     

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'fechando a conexão com o banco de dados

    oConn.Close()

    'liberando os objetos

    oConn.Dispose()

    oDataSet.Dispose()

    oConn = Nothing

    oDataSet = Nothing

    End Try

    End Sub

     

     


    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    quarta-feira, 2 de abril de 2008 23:41
  • Fala Laercio, muito obrigado, funcionou certinho, valeu pela ajuda.

    [ ] 's
    quinta-feira, 3 de abril de 2008 12:30