关于 SequoiaDB
快速入门
安装
基本操作
数据模型
SQL引擎
S3引擎
系统架构
数据库管理
连接器
驱动
参考手册
故障排除
SAC 管控中心
Web服务
版本信息
本文档介绍如何使用 Java 接口向 SequoiaS3 发送请求及接收响应。
SequoiaS3 安装路径下的 sample
目录中有一个 maven 类型的 Java 工程样例。
使用 IDEA 打开该工程(【File】->【Open】->选中文件夹中的 Pom.xml
->【Open as Project】->【Open Existing Project】->【New Window】),将 Test.java
中的 endPoint 修改为提供 S3 服务的 IP 和端口,开始使用 sample
中的样例对存储桶和对象及区域进行操作。
首先修改 endPoint 的地址和端口,使其指向 SequoiaS3 的地址和端口。
String accessKey="ABCDEFGHIJKLMNOPQRST"; String secretKey="abcdefghijklmnopqrstuvwxyz0123456789ABCD"; String endPoint = "http://localhost:8002"; SequoiaS3 sequoiaS3 = SequoiaS3ClientBuilder.standard() .withEndpoint(endPoint) .withAccessKeys(accessKey, secretKey) .build(); AWSCredentials credentials = new BasicAWSCredentials(accessKey,secretKey); AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endPoint, null); AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(endpointConfiguration) .withCredentials(new AWSStaticCredentialsProvider(credentials)) .build();
String regionName = "region-example"; String bucketName = "bucketname"; String objectName = "objectname"; File file = new File("example.png");
创建一个名为"region-example"的区域,该区域设置每年创建一个新的集合空间,在该集合空间中每月创建一个新的集合,用于存放对象数据
CreateRegionRequest request = new CreateRegionRequest(regionName) .withDataCLShardingType(DataShardingType.MONTH) .withDataCSShardingType(DataShardingType.YEAR); sequoiaS3.createRegion(request);
查询当前系统中的区域列表
ListRegionsResult listRegionsResult = sequoiaS3.listRegions();
查询区域配置及区域内的存储桶列表
GetRegionResult regionResult = sequoiaS3.getRegion(regionName); Region region = regionResult.getRegion(); List<String> buckets = regionResult.getBuckets(); System.out.println("region:" + region.toString()); for (int i=0; i < buckets.size(); i++) { System.out.println("Name:" + buckets.get(i)); }
在 region-example 区域中创建一个名为"bucketname"的桶
s3.createBucket(bucketName, regionName );
打开指定存储桶的版本控制功能
该功能未开启时,同一对象多次上传,历史记录会被覆盖,该功能开启后,同一对象多次上传的历史记录都会被记录在系统中
BucketVersioningConfiguration cfg = new BucketVersioningConfiguration("Enabled"); SetBucketVersioningConfigurationRequest request = new SetBucketVersioningConfigurationRequest(bucketName, cfg); s3.setBucketVersioningConfiguration(request);
从本地上传一个名为 example.png
的文件到存储桶中,并命名为"objectname"
PutObjectRequest request = new PutObjectRequest(bucketName, objectName, file); s3.putObject(request);
从存储桶中获得对象内容,并将对象内容存储在本地文件中
String filePath = "example.png"; GetObjectRequest request = new GetObjectRequest(bucketName, objectName); S3Object result = s3.getObject(request); S3ObjectInputStream s3is = result.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(filePath)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close();
获取指定版本的对象,当不指定 versionId 时,获取最新版本的对象
GetObjectRequest request = new GetObjectRequest(bucketName, objectName, versionId); S3Object object = s3.getObject(request);
查询存储桶中所有对象
ListObjectsV2Result result = s3.listObjectsV2(bucketName);
查询指定存储桶中的所有版本的对象信息,包括历史版本以及删除标记,当桶中版本记录过多,可以进行多次分批查询。
ListVersionsRequest request = new ListVersionsRequest() .withBucketName(bucketName); VersionListing result = s3.listVersions(request); if (result.isTruncated()) { result = s3.listNextBatchOfVersions(result); }
删除指定对象
版本功能未开启时,删除指定对象会直接将对象内容从系统中删除,版本功能开启后,删除操作会在系统中生成一个对象的删除标记,原对象内容会作为历史记录保留在系统中
s3.deleteObject(bucketName, objectName);
删除指定版本的对象,可以删除历史版本或删除标记,该操作会彻底删除系统中关于该版本的记录
s3.deleteVersion(bucketName, objectName, versionId);
删除指定存储桶
s3.deleteBucket(bucketName);
删除指定区域
sequoiaS3.deleteRegion(regionName);
判断指定区域是否存在
Boolean isRegionExist = sequoiaS3.headRegion(regionName); System.out.println("Region("+ regionName +") exist: " + isRegionExist);