Upload de imagens em ASP.NET

neste artigo demonstro como realizar o upload de imagens em ASP.NET, salvando-as em uma pasta física.

Olá pessoal, neste artigo demonstro como realizar o upload de imagens em ASP.NET, salvando-as em uma pasta física. Acompanhem:

Introdução

Em uma série de artigos feita tempos atrás abordei como fazer o upload de imagens e gravá-las no banco de dados. Mas como em muitos casos as imagens não costumam serem gravadas no banco e sim na própria aplicação, em uma determinada pasta física, resolvi fazer este artigo.

Dito isto, crie uma aplicação Web, adicione a ela uma pasta, chamada Imagens e, na Default.aspx, adicione o controle FileUpload, necessário para ser feito o upload das imagens, além de mais alguns controles, como a Figura 01 ilustra.


Figura 01 - Layout da página

Note a presença do controle ListBox na página, ele será usado mais a frente. O nome Gravar Imagens não é o mais indicado para o botão, já que iremos apenas fazer o upload da imagem em uma pasta física, mais para fins didáticos deixarei este nome.

A Listagem 01 ilustra a codificação deste botão, onde é feito o upload da imagem.

Listagem 01 - Upload da imagem para uma pasta física protected void btnGravar_Click(object sender, EventArgs e) { var mensagem = string.Empty; if (this.fupImagem.HasFile) { this.fupImagem.SaveAs(Server.MapPath("Imagens/" + fupImagem.FileName)); mensagem = "Imagem gravada com sucesso!"; } else mensagem = "Selecione uma imagem!"; ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Mensagem", "alert(' " + mensagem + "')", true); } Repare que, com poucas linhas de código, fazemos o upload da imagem para a pasta Imagens. Note também que é utilizado o método MapPath para se referenciar a pasta física do projeto.

É salvo na pasta como nome da imagem, o atributo FileName do FileUpload, que “pega” o nome exato da imagem, sem a extensão.

A Figura 02 ilustra as imagens na pasta Imagens.


Figura 02 - Pasta Imagens

Vamos agora adicionar um botão ao formulário, abaixo do Gravar Imagens. Dê a esse botão o nome Ver Imagens. Ainda no modo Design, clique na SmartTag do ListBox e cheque a opção Enable AutoPostBack. Agora clique nos eventos do ListBox, no canto direito, em Propriedades, e dê dois cliques no evento SelectedIndexChanged.

A Listagem 02 exibe a codificação do botão Ver Imagens. Note que não está sendo usado nenhum tratamento de erro, visto que o objetivo aqui não é esse, mais de qualquer forma você não deve se esquecer de sempre usá-lo em seus projetos.

Listagem 02 - Exibição do nome da imagem no ListBox protected void btnVerImagens_Click(object sender, EventArgs e) { var nomes = new List<String>(); var caminhoImagens = Server.MapPath("Imagens"); foreach (var item in Directory.GetFiles(Server.MapPath("Imagens"))) { nomes.Add(item.Replace(caminhoImagens + "\\", string.Empty)); } if (nomes != null && nomes.Count > 0) { this.ListBox1.DataSource = nomes; this.ListBox1.DataBind(); } } Notem que são utilizados duas variáveis auxiliares, uma é uma lista de Strings que é passada como DataSource para o ListBox. A outra é o caminho físico até chegar na pasta Imagens. Logo após é executado um laço foreach, percorrendo os arquivos contidos na pasta Imagens (lembre-se de declarar o namespace System.IO, para usar o método Directory) e, dentro do laço, é usado a variável auxiliar nomes, adicionando nela o nome da foto, retirando todo o caminho anterior, por meio do método Replace.

Para entender melhor o resultado, rode a aplicação e faça os testes. O nome de suas imagens deve estar como ilustrado pela Figura 03.


Figura 03 - Nome das imagens sendo exibidas no ListBox

Assim não é exibido todo o caminho físico completo até chegar na pasta Imagens.

Agora adicione uma nova página, chamada Imagens.aspx. Nela, adicione dois controles: 1 Image e 1 HyperLink. No HyperLink você pode adicionar a propriedade NavigateUrl, apontando para a Default.aspx, e colocar um Text, com o valor Voltar.

Esta página será chamada para visualizar a imagem, de acordo com a que for selecionada lá no ListBox da Default.aspx.

Se lembra do evento SelectedIndexChanged? Então, o usaremos agora. Volte a página de códigos da Default.aspx e faça a codificação nesse evento, ilustrado pela Listagem 03.

Listagem 03 - Evento SelectedIndexChanged, do ListBox protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { Response.Redirect("Imagem.aspx?IdImagem=" + this.ListBox1.SelectedItem.Text); } É chamado a página Imagem.aspx, passando via QueryString, o nome da imagem, contando com sua extensão (a QueryString seria montada como “IdImagem=02.jpg”). Agora basta ir a página Imagem.aspx e codificar o evento Load da página para que, ao carregar a página, seja verificado se há valor na QueryString (o usuário pode digitar “na mão” a URL sem passar o ID da imagem) e, se houver valor, basta carregar a imagem, passando seu caminho para o controle Image, criado anteriormente.

A codificação para isso está ilustrada na Listagem 04.

Listagem 04 - Codificação para exibir a imagem no controle protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString["IdImagem"] != null) this.imgImagem.ImageUrl = "~/Imagens/" + Request.QueryString["IdImagem"].ToString(); } } O resultado pode ser visto na Figura 04.


Figura 04 - Exibição da Imagem

Disponibilizo o código-fonte a quem se interessar neste artigo.

Assim finalizo o artigo. Muito obrigado a todos!

Um abraço, e até o próximo artigo.

Wellington Balbo de Camargo
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados