S3 Amazon com Java - resolvido

Meu código

package br.com.ghnetsoft.s3amazon.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;

import br.com.ghnetsoft.s3amazon.exception.GeralException;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class S3AmazonService implements Serializable {

	private static final long serialVersionUID = -8430710375947645965L;
	@Value("${amazon.login}")
	private String usuario;
	@Value("${amazon.senha}")
	private String senha;

	public void salvar(MultipartFile file) {
		try {
			AmazonS3 s3 = credentials();
			final String extensao = buscarExtensao(file.getContentType());
			final File novoArquivo = File.createTempFile("s3amazon", extensao);
			final FileOutputStream fos = new FileOutputStream(novoArquivo);
			fos.write(file.getBytes());
			s3.putObject(file.getName(), file.getOriginalFilename(), novoArquivo);
			fos.close();
		} catch (AmazonServiceException | IOException e) {
			log.error(e.getMessage(), e);
			throw new GeralException("Erro em salvar arquivo do servidor de arquivos !");
		}
	}

	public void deletar(String nome) {
		try {
			credentials().deleteBucket(nome);
		} catch (AmazonServiceException e) {
			log.error(e.getMessage(), e);
			throw new GeralException("Erro em deletar arquivo do servidor de arquivos !");
		}
	}

	public void listar() {
		try {
			List<Bucket> buckets = credentials().listBuckets();
			for (Bucket bucket : buckets) {
				log.info(bucket.getName());
			}
		} catch (AmazonServiceException e) {
			log.error(e.getMessage(), e);
			throw new GeralException("Erro em deletar arquivo do servidor de arquivos !");
		}
	}

	public void buscar(String nome) {
		try {
			S3Object s3object = credentials().getObject(nome, nome);
			S3ObjectInputStream inputStream = s3object.getObjectContent();
			FileUtils.copyInputStreamToFile(inputStream, new File("/Users/user/Desktop/hello.txt"));
		} catch (IOException | AmazonServiceException e) {
			log.error(e.getMessage(), e);
			throw new GeralException("Erro em buscar arquivodo servidor de arquivos !");
		}
	}

	private AmazonS3 credentials() {
		try {
			return AmazonS3ClientBuilder.standard()
					.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(usuario, senha)))
					.withRegion(Regions.US_EAST_2).build();
		} catch (AmazonServiceException e) {
			log.error(e.getMessage(), e);
			throw new GeralException("Erro ao conectar no servidor de arquivos !");
		}
	}

	private String buscarExtensao(final String extensaoArquivo) {
		String extensao = ".pdf";
		if ("IMAGE/BMP".equalsIgnoreCase(extensaoArquivo)) {
			extensao = ".bmp";
		} else if ("IMAGE/PNG".equalsIgnoreCase(extensaoArquivo.toUpperCase())) {
			extensao = ".png";
		} else if ("IMAGE/JPEG".equalsIgnoreCase(extensaoArquivo.toUpperCase())) {
			extensao = ".jpeg";
		} else if ("IMAGE/JPG".equalsIgnoreCase(extensaoArquivo.toUpperCase())) {
			extensao = ".jpg";
		} else if ("application/vnd.ms-Excel".equalsIgnoreCase(extensaoArquivo.toUpperCase())) {
			extensao = ".xlsx";
		}
		return extensao;
	}
}

Exceção

com.amazonaws.services.s3.model.AmazonS3Exception: The bucket is in this region: us-east-1. Please use this region to retry the request (Service: Amazon S3; Status Code: 301; Error Code: PermanentRedirect; Request ID: Q09PG4HCPVFSJ5P7)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1587) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1257) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1029) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:741) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:715) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:697) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:665) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:647) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:511) ~[aws-java-sdk-core-1.11.163.jar:na]
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4227) ~[aws-java-sdk-s3-1.11.163.jar:na]
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4174) ~[aws-java-sdk-s3-1.11.163.jar:na]
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1722) ~[aws-java-sdk-s3-1.11.163.jar:na]
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1577) ~[aws-java-sdk-s3-1.11.163.jar:na]
	at br.com.ghnetsoft.s3amazon.service.S3AmazonService.salvar(S3AmazonService.java:44) ~[classes/:na]

O que pode ser ?

O erro é este agora

The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 5F8BP1YXEEDB8TA3)

Login e senha errados ?

Provavelmente é o par de chaves incorreto ou sem permissão no IAM para executar a ação que você tentou fazer!

1 curtida

Imaginei passei para o cliente