Caro(a) Leitor(a), hoje eu vou mostrar na prática como fazer upload de uma imagem para o serviço do Amazon chamado S3, verificando o tamanho da imagem, largura e altura. É importante analisar o tamanho da imagem para que o usuário não envie imagens enormes.
Utilizado:
Ferramenta Visual Studio 2013
Linguagem de programação C#
Tecnologia ASP.NET
Serviço Amazon S3 (Scalable Store in the Cloud)
Falando um pouco do serviço da Amazon, até o momento está tudo funcionando de forma perfeita. Se você quiser aderir o serviço basta acessar o site aws.amazom.com, no primeiro ano é grátis pra você, na verdade o serviço começa a cobrar alguns centavos de dólar no seu cartão de crédito. Depois de um ano, o valor aumenta um pouco de acordo com a demanda de entrada de dados e saída. O valor é pequeno, tenha certeza disso.
Em resumo, não me arrependo de utilizar o serviço de armazenamento na nuvem. Existem outros serviços de armazenamento como o Azure da Microsoft, o problema é que, não tive oportunidade de testar ainda o serviço. Depois de testar, vou postar um artigo.
O código para fazer upload para qualquer servidor de hospedagem é simples. No site www.ecode10.com existem vários exemplos mostrando como envia imagens ou arquivos. Basta procurar por upload no site.
O que tem diferente então no código que irei mostrar? Bom, a grande diferença é que a página verifica o tamanho, largura e altura em poucas linhas de código. Para utilizar o serviço você precisa ter uma api / dll do Amazon referenciado no seu sistema / site. Essa api você encontra no site http://aws.amazon.com/sdkfornet/ e lá tem também uma pequena documentação.
Faça download da api e instale no seu computador. Não esqueça de referenciar a dll no seu código. Basta clicar com o botão direito do mouse em “References" e depois escolher a opção Add Reference… . Veja a imagem 1 abaixo:
Imagem 1 - Adicionando referência.
Vamos passar para a parte da interface. Procurei fazer uma tela simples, pois no meu caso, preciso que o usuário envie só uma vez a imagem. Existe então um campo texto, um botão para o usuário escolher a imagem e outro botão para enviar. Veja a imagem 2.
Imagem 2 - Interface.
Quem faz todo o trabalho aqui é o botão “Enviar Imagem”. Então vou programar ele agora pra você entender como fazer. Cliquei duas vezes em cima do botão e um método foi gerado para a codificação. Veja a referência 1.
Referência 1 - Codificando o botão “Enviar Imagem”.
protected void cmdEnviarImagem_Click(object sender, EventArgs e)
{
try
{
//pega o tamanho da imagem enviada
int tamanho = flUploadImagem.PostedFile.ContentLength;
if (tamanho <= 4000000)
{
//pega o nome da imagem.
string filename = System.IO.Path.GetFileName(flUploadImagem.PostedFile.FileName);
filename = Guid.NewGuid() + filename;
//informa código e senha
TransferUtility fileTransferUtility = new TransferUtility(“codigo", "senha");
//informa os parâmetros e pasta
var uploadRequest = new Amazon.S3.Transfer.TransferUtilityUploadRequest();
uploadRequest.InputStream = flUploadImagem.PostedFile.InputStream;
uploadRequest.BucketName = "Pasta";
uploadRequest.Key = filename;
uploadRequest.StorageClass = S3StorageClass.ReducedRedundancy;
uploadRequest.CannedACL = S3CannedACL.PublicRead;
//faz o upload.
fileTransferUtility.Upload(uploadRequest);
//pegando as informações da imagem para verificar largura e altura
string urlImagem = “url da imagem”;
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(urlImagem);
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebReponse.GetResponseStream();
System.Drawing.Image objImage = System.Drawing.Image.FromStream(stream);
//com o objeto, você pega a largura e altura
int w = objImage.Width;
int h = objImage.Height;
if (w <= 500 && h <= 500)
{
//insere o valor no banco de dados.
}
else
// exibe mensagem informando que o tamanho da imagem é maior do que 500.
}
else
{
//A imagem deve ser menor do que 4.000.000 bytes.
}
}
}
catch (Exception ex)
{
//erro ao enviar a imagem.
}
}
Note que em cada bloco de linha existe o comentário falando o que aquele conjunto de código faz. A primeira linha pega o tamanho total da imagem. Depois eu pego o nome e armazeno na variável “filename”.
//pega o tamanho da imagem enviada
int tamanho = flUploadImagem.PostedFile.ContentLength;
Coloquei também o GUID antes do nome para que não haja imagem repetida.
filename = Guid.NewGuid() + filename;
Para usar o TransferUtility é necessário usar um código e senha que o próprio Amazon informa no site.
//informa código e senha
TransferUtility fileTransferUtility = new TransferUtility(“codigo", "senha");
Continuando no código, alguns parâmetros precisam ser informados antes de fazer upload. É necessário informar a pasta, se a imagem pode reduzir a redundância e se ela é pública ou privada.
//faz o upload.
fileTransferUtility.Upload(uploadRequest);
Depois de upload, você pode pegar o local da imagem e verificar a largura e altura.
//pegando as informações da imagem para verificar largura e altura
string urlImagem = “url da imagem”;
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(urlImagem);
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebReponse.GetResponseStream();
System.Drawing.Image objImage = System.Drawing.Image.FromStream(stream);
//com o objeto, você pega a largura e altura
int w = objImage.Width;
int h = objImage.Height;
Dessa forma, o código ficou bem simples.
Bom, eu fico por aqui e espero que tenha gostado de todo o código aqui. Qualquer dúvida, pode entrar em contato pelo site www.mauriciojunior.org.