Topik ini menjelaskan cara menggunakan Amazon Simple Storage Service (S3) API untuk Java untuk terhubung dan menggunakan LindormTable serta menyediakan contoh.
Prasyarat
Java Development Kit (JDK) versi 1.8 atau yang lebih baru telah diinstal.
Titik akhir yang sesuai dengan S3 Compatibility Address pada tab Wide Table Engine di konsol Lindorm diperoleh. Untuk informasi lebih lanjut, lihat Lihat Titik Akhir.
Alamat IP klien Anda ditambahkan ke daftar putih instance Lindorm Anda. Untuk informasi lebih lanjut, lihat Konfigurasi Daftar Putih.
Prosedur
Instal S3 SDK untuk Java. Buka klien Eclipse, buat proyek, lalu konfigurasikan dependensi Maven untuk Java di file pom.xml.
Untuk Java SDK versi 1.x, tambahkan dependensi Maven berikut ke file konfigurasi:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.655</version> </dependency>Untuk Java SDK versi 2.x, tambahkan dependensi Maven berikut ke file konfigurasi:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-sdk-java</artifactId> <version>2.17.32</version> </dependency>
Gunakan kode contoh berikut dalam proyek berdasarkan kebutuhan Anda untuk terhubung ke LindormTable.
Kode contoh untuk Java SDK V1.x
Buat koneksi.
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // Tentukan titik akhir yang diperlukan untuk terhubung ke LindormTable menggunakan protokol S3. String bucketName = "testbucket"; // Buat koneksi. AmazonS3 client = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(s3Endpoint, null)) .withPathStyleAccessEnabled(true) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("AK", "SK"))) .build();CatatanGanti bidang AK dan SK dalam kode contoh dengan ID AccessKey dan Rahasia AccessKey yang sebenarnya digunakan untuk terhubung ke LindormTable. Kami merekomendasikan agar Anda mengonfigurasi ID AccessKey dan Rahasia AccessKey sebagai variabel lingkungan atau menentukannya dalam file konfigurasi daripada melakukan hardcoding.
Lakukan operasi pada bucket.
// Buat bucket. Bucket bucket = client.createBucket(bucketName); // Periksa apakah bucket ada. HeadBucketResult result = client.headBucket(new HeadBucketRequest(bucketName)); // Daftar semua bucket. List<Bucket> buckets = client.listBuckets(new ListBucketsRequest());CatatanUntuk membuat pengguna baru dan memberikan izin kepada pengguna untuk mengelola bucket, lihat Kelola Pengguna dan Kelola Izin dalam Kompatibilitas Protokol S3.
Lakukan operasi pada objek.
String content = "content"; // Unggah objek. client.putObject(bucketName, key_name, content); // Baca data dari objek. S3Object object = client.getObject(bucketName, keyName); // Daftar semua objek dalam bucket. // list v1 ObjectListing objects = client.listObjects(bucketName); // list v2 ListObjectsV2Result results = client.listObjectsV2(bucketName); // Hapus objek. client.deleteObject(bucketName, keyName); // Hapus beberapa objek sekaligus. client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keyName));Lakukan tugas unggah multipart.
// Konfigurasikan file yang ingin Anda unggah. File file = new File(filePath); long contentLength = file.length(); long partSize = 5 * 1024 * 1024; // Tetapkan ukuran setiap bagian menjadi 5 MB. List<PartETag> partETags = new ArrayList<PartETag>(); // Inisialisasi tugas unggah multipart. InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName); InitiateMultipartUploadResult initResponse = client.initiateMultipartUpload(initRequest); // Unggah bagian. long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { partSize = Math.min(partSize, (contentLength - filePosition)); // Kirim permintaan unggah multipart. 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; } // Selesaikan tugas unggah multipart. Setelah tugas selesai, objek akan terlihat. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName, initResponse.getUploadId(), partETags); client.completeMultipartUpload(compRequest);
Kode contoh untuk Java SDK V2.x
Buat koneksi.
String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // Tentukan titik akhir yang diperlukan untuk terhubung ke LindormTable menggunakan protokol S3. String bucketName = "testbucket"; // Buat koneksi. 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(); // Tutup koneksi. client.close();CatatanGanti bidang AK dan SK dalam kode contoh dengan ID AccessKey dan Rahasia AccessKey yang sebenarnya digunakan untuk terhubung ke LindormTable. Kami merekomendasikan agar Anda mengonfigurasi ID AccessKey dan Rahasia AccessKey sebagai variabel lingkungan atau menentukannya dalam file konfigurasi daripada melakukan hardcoding.
Lakukan operasi pada bucket.
// Buat bucket. S3Waiter s3Waiter = client.waiter(); CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .build(); // Periksa apakah bucket ada. client.createBucket(bucketRequest); HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder() .bucket(bucketName) .build(); WaiterResponse<HeadBucketResponse> waiterResponse = s3Waiter.waitUntilBucketExists(bucketRequestWait); waiterResponse.matched().response().ifPresent(System.out::println);CatatanUntuk membuat pengguna baru dan memberikan izin kepada pengguna untuk mengelola bucket, lihat Kelola Pengguna dan Kelola Izin dalam Kompatibilitas Protokol S3.
Lakukan operasi pada objek.
// Tulis data ke objek. PutObjectRequest putOb = PutObjectRequest.builder() .bucket(bucketName) .key(keyName) .build(); PutObjectResponse response = client.putObject(putOb, RequestBody.fromString("content")); // Baca data dari objek. GetObjectRequest objectRequest = GetObjectRequest .builder() .key(keyName) .bucket(bucketName) .build(); ResponseBytes<GetObjectResponse> objectBytes = client.getObjectAsBytes(objectRequest); byte[] data = objectBytes.asByteArray(); // Daftar objek. ListObjectsRequest listObjects = ListObjectsRequest .builder() .bucket(bucketName) .build(); ListObjectsResponse res = client.listObjects(listObjects); List<S3Object> objects = res.contents();Lakukan tugas unggah multipart.
// Inisialisasi tugas unggah multipart. CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(keyName) .build(); CreateMultipartUploadResponse response = client.createMultipartUpload(createMultipartUploadRequest); String uploadId = response.uploadId(); System.out.println(uploadId); // Unggah bagian 1 dari objek. 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(); // Unggah bagian 2 dari objek. 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(); // Selesaikan tugas unggah multipart. Setelah tugas selesai, objek akan terlihat. CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(part1, part2) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(keyName) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); client.completeMultipartUpload(completeMultipartUploadRequest);