Este tópico descreve como utilizar a API do Amazon Simple Storage Service (S3) para Java a fim de se conectar e usar o LindormTable, além de fornecer exemplos práticos.
Pré-requisitos
O Java Development Kit (JDK) V1.8 ou posterior deve estar instalado.
Obtenha um endpoint correspondente ao S3 Compatibility Address na aba Wide Table Engine do console Lindorm. Para mais informações, consulte Visualizar endpoints.
Adicione o endereço IP do seu cliente à lista de permissões da sua instância Lindorm. Para mais detalhes, veja Configurar listas de permissões.
Procedimento
-
Instale o SDK S3 para Java. Abra o cliente Eclipse, crie um projeto e configure a dependência Maven para Java no arquivo pom.xml.
-
Para o Java SDK V1.x, adicione a seguinte dependência Maven ao arquivo de configuração:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.655</version> </dependency> -
Para o Java SDK V2.x, inclua esta dependência Maven no arquivo de configuração:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-sdk-java</artifactId> <version>2.17.32</version> </dependency>
-
Utilize o código de exemplo abaixo no seu projeto, conforme necessário, para estabelecer a conexão com o LindormTable.
Código de exemplo para Java SDK V1.x
-
Crie uma conexão.
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // Specify the endpoint that is required to connect to LindormTable by using the S3 protocol. String bucketName = "testbucket"; // Establish a connection. AmazonS3 client = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(s3Endpoint, null)) .withPathStyleAccessEnabled(true) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("AK", "SK"))) .build();NotaSubstitua os campos AK e SK no código de exemplo pelo AccessKey ID e AccessKey secret que você realmente utiliza para conectar ao LindormTable. Recomendamos configurar o AccessKey ID e o AccessKey secret como variáveis de ambiente ou especificá-los no arquivo de configuração, em vez de codificá-los diretamente no código-fonte.
-
Execute operações em buckets.
// Create a bucket. Bucket bucket = client.createBucket(bucketName); // Check whether the bucket exists. HeadBucketResult result = client.headBucket(new HeadBucketRequest(bucketName)); // List all buckets. List<Bucket> buckets = client.listBuckets(new ListBucketsRequest());NotaPara criar um novo usuário e conceder permissões de gerenciamento de buckets, consulte Gerenciar usuários e Gerenciar permissões na compatibilidade com protocolo S3.
-
Realize operações em objetos.
String content = "content"; // Upload an object. client.putObject(bucketName, key_name, content); // Read data from an object. S3Object object = client.getObject(bucketName, keyName); // List all objects in a bucket. // list v1 ObjectListing objects = client.listObjects(bucketName); // list v2 ListObjectsV2Result results = client.listObjectsV2(bucketName); // Delete an object. client.deleteObject(bucketName, keyName); // Delete multiple objects at a time. client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keyName)); -
Efetue um upload multipart.
// Configure the file that you want to upload. File file = new File(filePath); long contentLength = file.length(); long partSize = 5 * 1024 * 1024; // Set the size of each part to 5 MB. List<PartETag> partETags = new ArrayList<PartETag>(); // Initialize the multipart upload task. InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName); InitiateMultipartUploadResult initResponse = client.initiateMultipartUpload(initRequest); // Upload parts. long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { partSize = Math.min(partSize, (contentLength - filePosition)); // Send the multipart upload request. UploadPartRequest uploadRequest = new UploadPartRequest() .withBucketName(bucketName) .withKey(keyName) .withUploadId(initResponse.getUploadId()) .withPartNumber(i) .withFileOffset(filePosition) .withFile(file) .withPartSize(partSize); UploadPartResult uploadResult = client.uploadPart(uploadRequest); partETags.add(uploadResult.getPartETag()); filePosition += partSize; } // Complete the multipart upload task. After the task is complete, the object is visible. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName, initResponse.getUploadId(), partETags); client.completeMultipartUpload(compRequest);
Código de exemplo para Java SDK V2.x
-
Estabeleça uma conexão.
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // Specify the endpoint that is required to connect to LindormTable by using the S3 protocol. String bucketName = "testbucket"; // Create a connection. AwsBasicCredentials creds = AwsBasicCredentials.create("AK", "SK"); S3Client client = S3Client.builder() .serviceConfiguration(b -> b.checksumValidationEnabled(false)) .region(Region.AP_EAST_1) .credentialsProvider(StaticCredentialsProvider.create(creds)) .endpointOverride(new URI(s3Endpoint)) .build(); // Close the connection. client.close();NotaSubstitua os campos AK e SK no código de exemplo pelo AccessKey ID e AccessKey secret que você realmente utiliza para conectar ao LindormTable. Recomendamos configurar o AccessKey ID e o AccessKey secret como variáveis de ambiente ou especificá-los no arquivo de configuração, em vez de codificá-los diretamente no código-fonte.
-
Gerencie operações em buckets.
// Create a bucket. S3Waiter s3Waiter = client.waiter(); CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .build(); // Check whether the bucket exists. client.createBucket(bucketRequest); HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder() .bucket(bucketName) .build(); WaiterResponse<HeadBucketResponse> waiterResponse = s3Waiter.waitUntilBucketExists(bucketRequestWait); waiterResponse.matched().response().ifPresent(System.out::println);NotaPara criar um novo usuário e conceder permissões de gerenciamento de buckets, consulte Gerenciar usuários e Gerenciar permissões na compatibilidade com protocolo S3.
-
Manipule dados de objetos.
// Write data to an object. PutObjectRequest putOb = PutObjectRequest.builder() .bucket(bucketName) .key(keyName) .build(); PutObjectResponse response = client.putObject(putOb, RequestBody.fromString("content")); // Read data from an object. GetObjectRequest objectRequest = GetObjectRequest .builder() .key(keyName) .bucket(bucketName) .build(); ResponseBytes<GetObjectResponse> objectBytes = client.getObjectAsBytes(objectRequest); byte[] data = objectBytes.asByteArray(); // List objects. ListObjectsRequest listObjects = ListObjectsRequest .builder() .bucket(bucketName) .build(); ListObjectsResponse res = client.listObjects(listObjects); List<S3Object> objects = res.contents(); -
Execute um upload multipart.
// Initialize the multipart upload task. CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(keyName) .build(); CreateMultipartUploadResponse response = client.createMultipartUpload(createMultipartUploadRequest); String uploadId = response.uploadId(); System.out.println(uploadId); // Upload part 1 of the object. UploadPartRequest uploadPartRequest1 = UploadPartRequest.builder().bucket(bucketName).key(keyName) .uploadId(uploadId) .partNumber(1).build(); String etag1 = client.uploadPart(uploadPartRequest1, RequestBody.fromString("content1")).eTag(); CompletedPart part1 = CompletedPart.builder().partNumber(1).eTag(etag1).build(); // Upload part 2 of the object. UploadPartRequest uploadPartRequest2 = UploadPartRequest.builder().bucket(bucketName).key(keyName) .uploadId(uploadId) .partNumber(2).build(); String etag2 = client.uploadPart(uploadPartRequest2, RequestBody.fromString("content2")).eTag(); CompletedPart part2 = CompletedPart.builder().partNumber(2).eTag(etag2).build(); // Complete the multipart upload task. After the task is complete, the object is visible. CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(part1, part2) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(keyName) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); client.completeMultipartUpload(completeMultipartUploadRequest);