Cette rubrique explique comment utiliser l'API S3 Java pour se connecter à Lindorm et y accéder. Elle fournit des instructions et des exemples de code.
Prérequis
Un environnement Java JDK 1.8 ou version ultérieure est nécessaire.
Vous disposez du S3-compatible Endpoint du moteur de table large Lindorm. Pour plus d'informations, consultez la section Afficher les adresses de connexion.
Vous avez ajouté l'adresse IP du client à la liste d'autorisation Lindorm. Pour plus d'informations, consultez la section Configurer une liste d'autorisation.
Procédure
-
Installez le SDK S3 Java. Ouvrez Eclipse, créez un projet et configurez les dépendances Maven dans le fichier pom.xml comme suit :
-
Ajoutez la dépendance Maven pour le SDK Java 1.x.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.655</version> </dependency> -
Ajoutez la dépendance Maven pour le SDK Java 2.x.
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-sdk-java</artifactId> <version>2.17.32</version> </dependency>
-
Dans votre projet, saisissez le code suivant pour vous connecter à LindormTable et y accéder.
Exemples de code pour le SDK Java 1.x
-
Créer une connexion
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // The S3-compatible endpoint for LindormTable String bucketName = "testbucket"; // Create a connection AmazonS3 client = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(s3Endpoint, null)) .withPathStyleAccessEnabled(true) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("AK", "SK"))) .build();RemarqueRemplacez les champs AK et SK de l'exemple par le nom d'utilisateur et le mot de passe de LindormTable. Stockez le mot de passe dans une variable d'environnement ou un fichier de configuration. N'utilisez pas de mots de passe codés en dur.
-
Opérations sur les buckets
// Create a bucket Bucket bucket = client.createBucket(bucketName); // Check if the bucket exists HeadBucketResult result = client.headBucket(new HeadBucketRequest(bucketName)); // List all buckets List<Bucket> buckets = client.listBuckets(new ListBucketsRequest());RemarquePour créer un utilisateur et lui accorder des autorisations pour les opérations sur les buckets, consultez les sections Créer un utilisateur et Gestion des permissions du protocole S3.
-
Opérations sur les objets
String content = "content"; // Upload an object client.putObject(bucketName, key_name, content); // Read an object S3Object object = client.getObject(bucketName, keyName); // List all objects in the bucket // list v1 ObjectListing objects = client.listObjects(bucketName); // list v2 ListObjectsV2Result results = client.listObjectsV2(bucketName); // Delete an object client.deleteObject(bucketName, keyName); // Delete objects in a batch client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keyName)); -
Opérations de téléchargement multipartie
// The file to upload File file = new File(filePath); long contentLength = file.length(); long partSize = 5 * 1024 * 1024; // Set the part size to 5 MB List<PartETag> partETags = new ArrayList<PartETag>(); // Initialize the multipart upload 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)); // Upload part 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. The object is now visible. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName, initResponse.getUploadId(), partETags); client.completeMultipartUpload(compRequest);
Exemples de code pour le SDK Java 2.x
-
Créer une connexion
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // The S3-compatible endpoint for LindormTable 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();RemarqueRemplacez les champs AK et SK de l'exemple par le nom d'utilisateur et le mot de passe de LindormTable. Stockez le mot de passe dans une variable d'environnement ou un fichier de configuration. N'utilisez pas de mots de passe codés en dur.
-
Opérations sur les buckets
// Create a bucket S3Waiter s3Waiter = client.waiter(); CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .build(); // Check if 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);RemarquePour créer un utilisateur et lui accorder des autorisations pour les opérations sur les buckets, consultez les sections Créer un utilisateur et Gestion des permissions du protocole S3.
-
Opérations sur les objets
// Write an object PutObjectRequest putOb = PutObjectRequest.builder() .bucket(bucketName) .key(keyName) .build(); PutObjectResponse response = client.putObject(putOb, RequestBody.fromString("content")); // Read 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(); -
Opérations de téléchargement multipartie
// Initialize the multipart upload 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 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 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. The object is now 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);