Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Cachorrada na Net
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!
 





Por Dennes Torres
dennes@bufaloinfo.com.br
Dennes Torres possui as certificações MCAD, MCSD,MCSE, MCDBA e MCT. Atualmente atua Como diretor da Búfalo Informática, líder do grupo de usuários DevASPNet no Rio de Janeiro e membro da liderança dos grupos getWindows e devSQL, também do Rio de Janeiro, podendo sempre ser encontrado na lista de discussão do grupo DevASPNet (devaspnet-subscribe@yahoogrupos.com.br) bem como nas reuniões do grupo. Mantém dois blogs em http://cidadaocarioca.blogspot.com

Fazendo Upload de Imagens e gravação em banco

Pesquisa personalizada
Pesquisar Dicas:






Gravação de imagens em banco é um assunto sempre polêmico e mal compreendido. Existem duas alternativas para lidarmos com imagens em nossas aplicações : Podemos gravar a imagem em um campo de banco ou podemos gravar o caminho da imagem no banco de dados. Vamos analisar estas duas opções.

Gravar a imagem no banco

A aplicação fica mais fácil de ser acessada, já que o próprio banco de dados entrega a imagem

Fica mais dificil gerenciar a base de dados devido a inserção de imagens

Gravar o caminho da imagem no banco

As aplicações client recebem o caminho da imagem, consequentemente precisam ter acesso ao local onde a imagem se encontra.

O banco de dados fica mais leve e fácil de gerenciar por não conter a imagem

Tendo exposto estas questões, vamos então ver um exemplo de como fazer gravação de imagens em banco em uma aplicação web.

Crie a seguinte tabela na base de dados :

Id Int Identity(1,1)
Nome varchar(50)
Foto Image

Neste evento precisamos preencher o parâmetro @foto. o FileUpload não se vincula diretamente com um dataSource, então precisamos fazer o preenchimento do parâmetro por código.

Observe que precisamos também alterar o tipo do parâmetro. O tipo default do parâmetro definido pelo sqlDataSource é interpretado como sqlVariant ao ser enviado para o banco de dados e SqlVariant e Image não são diretamente compatíveis. Então alteramos o tipo do parâmetro para garantir que a gravação funcione.

Veja como fica :

 

    1     Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Inserting

    2 

    3         Dim fu As FileUpload

    4         fu = FormView1.FindControl("fileupload1")

    5         e.Command.Parameters("@foto").DbType = Data.DbType.Binary

    6 

    7         e.Command.Parameters("@foto").Value = fu.FileBytes()

    8     End Sub

Pronto, pode testar. A inclusão de uma imagem no banco de dados já funciona.

A outra parte do processo, a exibição de uma imagem do banco de dados, nós explicamos anteriormente, de forma detalhada, em http://www.bufaloinfo.com.br/artigos/artigo200605.asp

Veja como fica o código do handler, vamos chama-lo de "exibirImagem.ashx" :

    1 Public Class ForneceImagens : Implements IHttpHandler

    2 

    3     Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    4 

    5         Dim dr As Data.SqlClient.SqlDataReader

    6         Dim buffer(99) As Byte

    7         Dim inicio As Integer

    8         Dim lido As Integer

    9         Dim cmdFoto As New Data.SqlClient.SqlCommand

   10         Dim cn As New Data.SqlClient.SqlConnection

   11 

   12         cn.ConnectionString = ConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString

   13 

   14         cmdFoto.CommandText = "Select foto from fotos where id=@id"

   15         cmdFoto.Parameters.Add("@id", Data.SqlDbType.Int)

   16 

   17 

   18         cmdFoto.Parameters("@ID").Value = context.Request.QueryString("id")

   19 

   20         cmdFoto.Connection = cn

   21         cn.Open()

   22         dr = cmdFoto.ExecuteReader(Data.CommandBehavior.SequentialAccess)

   23 

   24 

   25         context.Response.ContentType = "image/jpeg"

   26         inicio = 0

   27         dr.Read()

   28         context.Response.BinaryWrite(dr("foto"))

   29         dr.Close()

   30         cn.Close()

   31     End Sub

   32 

   33     Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable

   34         Get

   35             Return False

   36         End Get

   37     End Property

   38 

   39 End Class

 

Por fim,criamos uma nova página para exibir a imagem.

Pronto, pode testar



Envie seus comentários sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentários nesta página

Veja abaixo os comentários já enviados :

Nome : henrique E-Mail : henrique@psa.ind.br
Bom dia Dennes

Parabens pelo artigo. So que estou com um problema na parte de Gravaçao de imagem o meu formView quando eu altero a propriedade defaultMode para Insert
o FileUpload desaparece ficando com apenas uma caixa de texto no lugar, o que estou fazendo de errado.


Atenciosamente

Henrique

Henrique
Nome : Elida E-Mail : elida_nob@yahoo.com.br
legal, mas gostaria ver uploand de imagens no codigo em asp.
Nome : Márcia E-Mail : marcia-w3@hotmail.com
Dennes,
foi simplesmente D+ o seu artigo, mto bem explicado e o melhor, funciona que é uma beleza. Era tudo que eu precisava.

Mto Obrigada,
Márcia
Nome : Graziani Zanfolin E-Mail :
Cara,

Parabens pela solução, com poucas alterações armazenei somente o caminho e a imagem em uma pasta a parte...

Abraços....
Nome : Renato E-Mail : renato.amorim@br.prosegur.com
Artigo muito bom, mesmo, estou com um problema ve se vc pode me ajudar,por favor e se eu tiver um arrey de bytes
ex:

cmdFoto.CommandText = "Select foto from fotos where id=@id"
cmdFoto.Parameters.Add("@id", Data.SqlDbType.Int)
cmdFoto.Parameters("@ID").Value = System.Byte[]

neste caso esta aparecer o seguint erro: Failed to convert parameter value from a System.Byte[] to a Byte.

E então como cconverter
Nome : Dennes E-Mail : dennes@bufaloinfo.com.br
Renato,

Não deu para entender o que tentou fazer.

Se está buscando uma foto pelo ID, deve buscar apenas uma foto.

[]'s

Dennes
Nome : helder E-Mail : hferrari10@gmail.com
Dennes vê se voce pode me ajudar
o servidor me disponibilizou um codigo para fazer upload de imagem para uma pasta, porém eu preciso que o cliente faça o upload da foto e o nome do arquivo seja armazenado no banco de dados. Como devo implementar este codigo para o nome do arquivo ir para o banco
obrigado


<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Selecione os Arquivos</H1>
<HR>
<%

Dim mySmartUpload
Dim intCount

Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

mySmartUpload.Upload

intCount = mySmartUpload.Save("d:\web\tudo\www\imagens")
' sample with a physical path
' intCount = mySmartUpload.Save("c:\temp\")

Response.Write(intCount & " file(s) uploaded.")
%>
</BODY>
</HTML>
Nome : Dennes E-Mail : dennes@bufaloinfo.com.br
Oi,

Seu código utiliza métodos da época do ASP 3

Adapte a aplicação acima de forma a gravar o arquivo em disco e o nome dele no banco.

[]'s

Dennes
Nome : E-Mail :
Nome : E-Mail :
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : yvb19Ek0WJk E-Mail : d5l2sn3b@hotmail.com
Hej Gertrud-ve4nnen! Vad glad jag blir att du e4r be4ttre igen! Ff6rste5r ve4l hur du menar e4n om jag ju inte gf6r beste4llningar, det blir ju inte du sje4lv som fe5r fria tyglar och ibalnd me5ste det ju vara befriande att bara fe5 gf6ra efter ditt helt egna tycke och smak. Och du har lyckats helt fantastiskt he4r - tror inte du kunde fe5tt det be4ttre ff6r e4r se5 mycket he4rliga och vackra detaljer... och LenaJ se5 sne4ll med ostduken - men skulle du inte ha den till att ysta med... hi hi... ;) Du e4r se5 duktig!Hoppas du snart fe5r en mysig pysselstund igen och att du har det se5 bra du bara kan och tusen tusen tack ff6r dina kommentarer - de ve4rmer se5!Massor med kramarc5sa
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1