Para isso a AMAZON AWS oferece um serviço bastante barato e rápido que pode ser utilizado para diversas outras funcionalidades. Apresentação do serviço no site oficial: http://aws.amazon.com/pt/s3/.
A intenção desse post é exatamente mostrar como é simples a integração com o serviço "Simple Storage Service" ou como é conhecido AMAZON S3.
A intenção desse post é exatamente mostrar como é simples a integração com o serviço "Simple Storage Service" ou como é conhecido AMAZON S3.
Primeiramente eu criei uma classe estática e nela vamos codificar o nosso método de uploadFile. A organização de onde ficaria melhor a classe fica a critério da arquitetura que você está trabalhando.
Antes de começar a codificar vamos fazer referencia ao SDK da amazon aws, você pode encontrar ele facilmente no Nuget.https://www.nuget.org/packages/AWSSDK/2.3.12 ou se você prefere por command.
public static class UploadAmazon
{
private static IAmazonS3 client;
public static HttpStatusCode UploadFile(Stream file, string type, string nomeImagem)
{
using (client = AWSClientFactory.CreateAmazonS3Client("****key****", "***secret key****"))
{
PutObjectRequest request = new PutObjectRequest();
request.BucketName = "MeusArquivos"; //nome do bucket name
request.CannedACL = S3CannedACL.PublicRead; //permissões
request.Key = "Arquivos/" + nomeImagem; //diretorio e nome do arquivo
request.ContentType = type; //type do arquivo
request.InputStream = file; //Stream do arquivo
return client.PutObject(request).HttpStatusCode;
}
}
}
Veja que o código é bastante simples =)Apenas se atentar alguns detalhes, a propriedade "BucketName" eu coloquei fixa porém você poderia fazer uma verificação se esse "BucketName" se ele já não existe na sua storage, ficaria mais ou menos assim:
private static bool IsCheckBucket(string bucketName)
{
ListBucketsResponse response = client.ListBuckets();
bool found = false;
foreach (S3Bucket bucket in response.Buckets)
{
if (bucket.BucketName == bucketName)
{
found = true;
break;
}
}
return found;
}
(...) e para criar o BucketName public void CreateBucket(string bucketName)
{
if (!this.IsCheckBucket(bucketName))
{
client.PutBucket(new PutBucketRequest()
{
BucketName = bucketName,
UseClientRegion = true //Utiliza a mesma região que estiver como padrão no WS.
});
}
}
Outra propriedade importante também seria "CannedACL" que indica o tipo de permissão que o arquivo terá no storage da amazon aws, nesse caso eu coloquei como "S3CannedACL.PublicRead" que esse arquivo poderá ser visto publicamente.
Para concluirmos você deve ter reparado que ao fazer a chamada da classe "AWSClientFactory" você precisa passar a ela a sua chave e também a chave secreta. Essas duas chaves você pode gerar através do painel de controle da Amazon AWS.
Ao acessar o console https://aws.amazon.com/ com o teu login, você vai ver no menu acima na aba escrita com seu nome a opção "Security Credencials".
Acesse:
Agora é só gerar a sua key e secret key e inserir na chamada.
Se obtiver sucesso no upload você pode acessar o console na opção de serviço S3, você vai perceber que o seu "BucketName" e dentro dele o arquivo enviado, ao clicar sobre o arquivo perceba nas propriedade que Amazon AWS gerou uma url publica de acesso ao seu arquivo que será algo parecido com isso: https://s3.amazonaws.com/MeusArquivos/Arquivos/nome_arquivo
Agora é só usufruir da performance que a storage vai te oferecer além disso com um valor muito pequeno.
Espero ter ajudado.
Abraço,
Nenhum comentário:
Postar um comentário