Upload de imagem para o Amazon verificando tamanho, largura e altura
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.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.