Antes de continuarmos falando de camadas e padrões, vamos fazer alguns uploads e ler alguns arquivos nos diretórios.
Para isso vamos basicamente fazer uma galeria de imagens.
Nossa galeria de imagens terá a seguinte forma:
Onde teremos um objeto do tipo File Upload, um Text Box para darmos um nome para a imagem, um Button para enviar os dados, e um Label para mostrarmos as imagens.
Devemos importar:
using System.IO; using System.Text;
Nosso 1º passo será criar a ação do botão, que ficará da seguinte maneira:
protected void btnSalvar_Click(object sender, EventArgs e)
{
if (VerificaDadosArquivo(fuArquivos, txtNome.Text))
{
try
{
SalvarArquivos(fuArquivos, txtNome.Text);
}
catch(Exception ex)
{
  ClientScript.RegisterStartupScript(typeof(string), "Erro", "<script>alert('" + ex.Message + "')</script>");
}
}
}
Verificamos que temos dois métodos nessa chamada, o VerificaDadosArquivo que retorna um bool e o SalvarArquivo que é void.
O método VerificaDadosArquivo irá fazer a validação das informações enviadas e a validação dos arquivos que eu quero liberar para upload.
private bool VerificaDadosArquivo(FileUpload fuArquivos, string nome)
{
if (fuArquivos.PostedFile == null || nome == string.Empty)
{
ClientScript.RegisterStartupScript(typeof(string), "Erro", "<script>alert('Preencha todos os dados')</script>");
return false;
}
if (fuArquivos.PostedFile.ContentType.IndexOf("gif") < 0 && fuArquivos.PostedFile. ContentType.IndexOf("jpeg") < 0)
{
ClientScript.RegisterStartupScript(typeof(string), "Erro", "<script>alert('Escolha imagens tipo .gif ou .jpg')</script>");
return false;
}
return true;
}
Na 1º validação é verificado se o usuário digitou todos os dados, na 2º validação é verificado se o arquivos que o usuário quer enviar é do tipo “gif” ou “jpeg”, verificamos no ContentType pois é mais seguro que apenas verificar a extensão do arquivo, já que a mesma pode ser alterada.
Passado pelas nossas validações o arquivo é salvo:
private void SalvarArquivo(FileUpload fuArquivos, string nome)
{
string diretorio = ConfigurationManager.AppSettings["Diretorio"];
DirectoryInfo infoDir = new DirectoryInfo(diretorio);
if (!infoDir.Exists)
{
infoDir.Create();
}
FileInfo infoFile = new FileInfo(fuArquivos.PostedFile.FileName);
fuArquivos.PostedFile.SaveAs(diretorio + nome + infoFile.Extension);
ListarImagensDiretorio();
}
Neste método, falamos qual é o diretório que queremos salvar o arquivo, deixo na Web.Config para poder ser alterado a qualquer hora.
Depois disso, criamos uma variável do tipo DirectoryInfo para termos todas as informações do diretório que usaremos. Após, se ele não existir, é criado.
Outra variável é criada, uma variável do tipo FileInfo para agora termos as informações do arquivo que o usuário quer salvar.
Já sabemos que o arquivo é do tipo que queremos e está tudo certinho, então vamos salvar, no diretório criado, com o nome fornecido pelo usuário e a extensão correta.
Perfeito, o upload está pronto!
Precisamos agora listar as nossas imagens. Abaixo do texto de listar imagens, vamos ajustar o Label que tinhamos colocado.
No PageLoad e no Método SalvarArquivo vamos chamar o método ListarImagensDiretorio (como visto acima, no fim do método de Salvar):
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ListarImagensDiretorio();
}
}
O método é o seguinte:
private void ListarImagensDiretorio()
{
string diretorio = ConfigurationManager.AppSettings["Diretorio"];
string url = ConfigurationManager.AppSettings["URL"];
StringBuilder oSbImages = new StringBuilder();
bool hasFiles = false;
DirectoryInfo oDirec = new DirectoryInfo(diretorio);
oSbImages.Append("<div style='width:500px'>");
foreach (FileInfo oFile in oDirec.GetFiles())
{
if (oFile.Extension.Equals(".gif") || oFile.Extension.Equals(".jpg"))
{
oSbImages.Append("<div class='imagens'>");
oSbImages.Append(" <a href='" + url + oFile.Name + "' target='_blank'>");
oSbImages.Append(" <img src='" + url + oFile.Name + "' width='85' height='52' border='0'><br>");
oSbImages.Append(" <span class='titulo'>" + oFile.Name.Replace(oFile.Extension, string.Empty) + "</span>");
oSbImages.Append(" </a>");
oSbImages.Append("</div>");
hasFiles = true;
}
}
oSbImages.Append("</div>");
if (hasFiles)
{
lblImagens.Text = oSbImages.ToString();
}
else
{
lblImagens.Text = "Nenhuma Imagem no Diretório.";
}
}
Vamos navegar neste método.
Primeiramente temos as declarações das variáveis: "diretorio" (Podemos também fazer apenas um MapPath da variável "url") com o conteúdo da Web.Config, "url" que será o caminho virtual para a pasta, uma variável StringBuilder para criarmos a lista de imagens, um bool para checarmos se existem imagens, e, por fim, uma variável do tipo DirectoryInfo que possui as informações do diretório.
OBS: Algumas dessas variáveis poderiam ser globais, mas como exemplificar assim fica mais fácil eu fiz dessa maneira.
Com minha StringBuilder eu crio umas frescurinhas para a apresentação das imagens.
No laço, para cada arquivo em meu diretório, se a extensão for .gif ou .jpg apresento a imagem. (Para não pegar arquivos como thumb.db)
OBS: No método GetFiles, eu poderia ter colocado para pegar apenas os gifs desta maneira GetFiles(“.gif”), porém como precisaremos pegar todos os .gif e .jpg não poderemos usar esse esquema.
No final do método, se existir um arquivo apresento a StringBuilder se não apresenta a mensagem.
Prontinho, rápido e sem dores... No caso sem odores já que jogamos no Lixo =)
Link para baixar o projeto. Está pesado pois mando junto as imagens!
Abraços pessoal! Bons estudos...
1 comentários:
Olá!
Como exportar dados de um banco de dados slq server 2005 para um segundo banco sql server 2005 remotamente?
Obrigado!
Ivan
Postar um comentário
Jogue sua opinião na lixeira!