创建OSSClient
OSSClientBuilder builder = new OSSClientBuilder();
OSS ossClient = builder.build(endpoint, accessKeyId, accessKeySecret);
String endpoint = "<yourEndpoint>";
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 判断Bucket是否存在。
boolean exists = ossClient.doesBucketExist(bucketName);
if (!exists) {
// 如果Bucket不存在则创建。
ossClient.createBucket(bucketName);
}
System.out.println("OSS连接成功!");
创建Bucket
ossClient.createBucket(bucketName);
删除Bucket
ossClient.deleteBucket(bucketName);
判断Bucket是否存在
boolean exists = ossClient.doesBucketExist(bucketName);
设置Bucket访问权限
ossClient.setBucketAcl(bucketName, CannedAccessControlList.Private);
获取Bucket访问权限
AccessControlList acl = ossClient.getBucketAcl(bucketName);
设置Bucket的生命周期规则
LifecycleRule rule = new LifecycleRule("ruleId", "prefix", LifecycleRule.RuleStatus.Enabled, 30);
List<LifecycleRule> rules = new ArrayList<LifecycleRule>();
rules.add(rule);
ossClient.setBucketLifecycle(bucketName, rules);
获取Bucket的生命周期规则
String bucketName = "<yourBucketName>";
List<LifecycleRule> lifecycleRules = new ArrayList<>();
LifecycleRule lifecycleRule = new LifecycleRule();
lifecycleRule.setId("delete expired files");
lifecycleRule.setPrefix("prefix/");
lifecycleRule.setStatus(LifecycleRule.RuleStatus.Enabled);
lifecycleRule.setExpirationDays(30);
lifecycleRules.add(lifecycleRule);
ossClient.setBucketLifecycle(bucketName, lifecycleRules);
设置Bucket的跨域规则
BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration();
configuration.addRule(new BucketCrossOriginConfiguration.Rule().addAllowedOrigin("*").addAllowedMethod(HttpMethod.GET).setMaxAgeSeconds(100));
ossClient.setBucketCrossOriginConfiguration(bucketName, configuration);
获取Bucket的跨域规则
BucketCrossOriginConfiguration configuration = ossClient.getBucketCrossOriginConfiguration(bucketName);
设置 Bucket CORS 规则
String bucketName = "<yourBucketName>";
List<CORSRule> corsRules = new ArrayList<>();
CORSRule corsRule = new CORSRule();
corsRule.setAllowedOrigins(Arrays.asList("*"));
corsRule.setAllowedMethods(Arrays.asList(HttpMethod.GET, HttpMethod.PUT, HttpMethod.POST));
corsRule.setAllowedHeaders(Arrays.asList("*"));
corsRules.add(corsRule);
ossClient.setBucketCORSRules(bucketName, corsRules);
设置 Bucket 防盗链规则
String bucketName = "<yourBucketName>";
List<Referer> referers = new ArrayList<>();
referers.add(new Referer("*"));
RefererConfiguration refererConfiguration = new RefererConfiguration();
refererConfiguration.setAllowEmptyReferer(true);
refererConfiguration.setRefererList(referers);
ossClient.setBucketReferer(bucketName, refererConfiguration);
上传文件
ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));
上传文件并设置元数据
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(content.length());
ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()), metadata);
上传文件并设置ACL
PutObjectRequest request = new PutObjectRequest(bucketName, key, new ByteArrayInputStream(content.getBytes()));
request.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.putObject(request);
获取文件
OSSObject object = ossClient.getObject(bucketName, key);
下载文件
String bucketName = "<yourBucketName>";
String objectName = "<yourObjectName>";
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
InputStream inputStream = ossObject.getObjectContent();
// 处理 inputStream
ossObject.close();
获取文件元数据
ObjectMetadata metadata = ossClient.getObjectMetadata(bucketName, key);
下载文件
OSSObject object = ossClient.getObject(bucketName, key);
InputStream inputStream = object.getObjectContent();
byte[] bytes = IOUtils.toByteArray(inputStream);
删除文件
ossClient.deleteObject(bucketName, key);
批量删除文件
List<String> keys = new ArrayList<String>();
keys.add("key1");
keys.add("key2");
DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(keys);
ossClient.deleteObjects(request);
列举Bucket下的所有文件
方法一
ListObjectsRequest request = new ListObjectsRequest(bucketName);
ObjectListing listing = ossClient.listObjects(request);
while (true) {
List<OSSObjectSummary> summaries = listing.getObjectSummaries();
for (OSSObjectSummary summary : summaries) {
System.out.println(summary.getKey());
}
if (listing.isTruncated()) {
listing = ossClient.listNextBatchOfObjects(listing);
} else {
break;
}
}
方法二
String bucketName = "yourBucketName";
List<OSSObjectSummary> objects = ossClient.listObjects(bucketName).getObjectSummaries();
for (OSSObjectSummary object : objects) {
System.out.println(object.getKey());
}
列举Bucket中的文件夹
String bucketName = "yourBucketName";
String prefix = "yourPrefix";
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(prefix).withDelimiter("/"));
List<String> commonPrefixes = objectListing.getCommonPrefixes();
for (String commonPrefix : commonPrefixes) {
System.out.println(commonPrefix);
}
分块上传
String bucketName = "<bucketName>";
String objectName = "<objectName>";
File file = new File("<filePath>");
// 初始化分块上传
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
InitiateMultipartUploadResult result = ossClient.initiateMultipartUpload(request);
// 上传分块
long partSize = 1024 * 1024L; // 1MB
long fileLength = file.length();
int partCount = (int) (fileLength / partSize) + ((fileLength % partSize > 0) ? 1 : 0);
List<PartETag> partETags = new ArrayList<PartETag>();
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
FileInputStream inputStream = new FileInputStream(file);
inputStream.skip(startPos);
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(result.getUploadId());
uploadPartRequest.setInputStream(inputStream);
uploadPartRequest.setPartSize(curPartSize);
uploadPartRequest.setPartNumber(i + 1);
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
partETags.add(uploadPartResult.getPartETag());
}
// 完成分块上传
CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(bucketName, objectName, result.getUploadId(), partETags);
ossClient.completeMultipartUpload(completeRequest);
拷贝文件
String sourceBucketName = "yourSourceBucketName";
String sourceObjectName = "yourSourceObjectName";
String destinationBucketName = "yourDestinationBucketName";
String destinationObjectName = "yourDestinationObjectName";
ossClient.copyObject(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
获取文件的url
String bucketName = "your-bucket-name";
String objectName = "your-object-name";
Date expiration = new Date(new Date().getTime() + 3600 * 1000); // 设置URL过期时间为1小时
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
System.out.println(url.toString());
移动文件
String sourceBucketName = "your-source-bucket-name";
String sourceObjectName = "your-source-object-name";
String destinationBucketName = "your-destination-bucket-name";
String destinationObjectName = "your-destination-object-name";
ossClient.copyObject(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
ossClient.deleteObject(sourceBucketName, sourceObjectName);//比复制文件多了一步删除
上传大文件
String bucketName = "your-bucket-name";
String objectName = "your-object-name";
String uploadFile = "your-upload-file";
String checkpointFile = "your-checkpoint-file";
ossClient.uploadFile(bucketName, objectName, uploadFile, checkpointFile);
判断文件是否存在
String bucketName = "your-bucket-name";
String objectName = "your-object-name";
boolean exists = ossClient.doesObjectExist(bucketName, objectName);
System.out.println(exists);