Como criar um repositório de imagens usando Java e o Amazon S3

Olá! Até tempos atrás, quando Cloud Computing não tinha as proporções que vemos hoje, era comum salvar imagens e outros arquivos estáticos em um diretório no servidor ou em banco de  dados em campos do tipo BLOB.

Hoje é possível salvar imagens e arquivos estáticos em serviços na nuvem, como o Amazon S3.

Para fazer isto em Java, você precisar ter uma conta na Amazon AWS, criar um Bucket no S3 e colocar o AWS SDK Java no seu classpath.

Para salvar no S3, você precisa criar um objeto do tipo AWSCredentials, para fazer a autenticação no serviço e então instanciar um objeto do tipo AmazonS3

String accessKey = "accessKey";
String secretKey = "secretKey;
AWSCredentials awsCredential = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3 = new AmazonS3Client(awsCredential);

Agora que temos o objeto AmazonS3, vamos buscar o conteúdo do arquivo, o InputStream, e também criar um objeto do tipo ObjectMetaData, que representa um objeto armazenado no S3. Para criar o objeeto do tipo ObjectMetaData é preciso informar o tamanho do arquivo em bytes:

InputStream inputStream = new FileInputStream("img/image.jpg");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(inputStream.available());

Tendo o objeto ObjectMetadata criado, agora é necessário chamar o método que de fato publica o arquivo no S3. Para isso, é preciso informar o nome do bucket, o nome do arquivo no S3, o inputStream do arquivo, e o objeto ObjectMetadata:

String bucketName = "bucketName";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, "image.jpg", inputStream, objectMetadata);
s3.putObject(putObjectRequest);

Agora que o arquivo foi publicado no S3, você pode acessá-lo pela URL abaixo:

<pre>https://s3-sa-east-1.amazonaws.com/bucketName/image.jpg</pre&gt;

Abaixo o snippet completo:

public class S3Snippet {

	public static void main(String[] args) {
		String accessKey = &quot;accessKey&quot;;
		String secretKey = &quot;secretKey&quot;;
		AWSCredentials awsCredential = new BasicAWSCredentials(accessKey, secretKey);
		AmazonS3 s3 = new AmazonS3Client(awsCredential);

		try {
			InputStream inputStream = new FileInputStream(&quot;img/image.jpg&quot;);
			ObjectMetadata objectMetadata = new ObjectMetadata();
			objectMetadata.setContentLength(inputStream.available());

			String bucketName = &quot;bucketName&quot;;
			PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, &quot;image.jpg&quot;, inputStream, objectMetadata);
			s3.putObject(putObjectRequest);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
Anúncios

Uma ideia sobre “Como criar um repositório de imagens usando Java e o Amazon S3

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s