业务需求
- 将本地的一些文件保存到aws上
- 引入依赖
- 创建client
- 工具类
引入依赖
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sns</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudfront</artifactId>
</dependency>
创建client
private S3Client createClient() {
AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(AwsBasicCredentials.create(minIoAccessKey, minIoSecretKey));
S3Client s3 = S3Client.builder()
.region(Region.CN_NORTHWEST_1)
.credentialsProvider(credentialsProvider)
.endpointOverride(URI.create(minIoUrl))
.build();
return s3;
}
aws工具类
public class MinioOperate {
private String minIoAccessKey;
private String minIoSecretKey;
private String minIoUrl;
public MinioOperate() {
}
public MinioOperate(String minIoAccessKey, String minIoSecretKey, String minIoUrl) {
this.minIoAccessKey = minIoAccessKey;
this.minIoSecretKey = minIoSecretKey;
this.minIoUrl = minIoUrl;
}
#创建aws的客户端
private S3Client createClient() {
AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(AwsBasicCredentials.create(minIoAccessKey, minIoSecretKey));
S3Client s3 = S3Client.builder()
.region(Region.CN_NORTHWEST_1)
.credentialsProvider(credentialsProvider)
.endpointOverride(URI.create(minIoUrl))
.build();
return s3;
}
// public String generatePresignedUrl(String bucketName, String objectKey, String acl) {
// URL url = null;
// try {
// AWSStaticCredentialsProvider credentialsProvider =
// new AWSStaticCredentialsProvider(
// new BasicAWSCredentials(minIoAccessKey, minIoSecretKey));
//
// AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard();
// builder.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(minIoUrl, Regions.CN_NORTHWEST_1.getName()));
//
// AmazonS3 s3Client = builder
// .withPathStyleAccessEnabled(true)
// .withCredentials(credentialsProvider)
// .build();
//
// // Set the presigned URL to expire after one hour.
// Date expiration = new Date();
// long expTimeMillis = expiration.getTime();
// expTimeMillis += 1000 * 60 * 60 * 4;
// expiration.setTime(expTimeMillis);
//
// // Generate the presigned URL.
// GeneratePresignedUrlRequest generatePresignedUrlRequest =
// new GeneratePresignedUrlRequest(bucketName, objectKey)
// .withMethod(HttpMethod.GET)
// .withExpiration(expiration);
//
// // set acl
// if (!StringUtils.isEmpty(acl)) {
// generatePresignedUrlRequest.withMethod(HttpMethod.PUT);
// generatePresignedUrlRequest.addRequestParameter(Headers.S3_CANNED_ACL, acl);
// }
//
// url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
//
// } catch (AmazonServiceException e) {
// // The call was transmitted successfully, but Amazon S3 couldn't process
// // it, so it returned an error response.
// e.printStackTrace();
// } catch (SdkClientException e) {
// // Amazon S3 couldn't be contacted for a response, or the client
// // couldn't parse the response from Amazon S3.
// e.printStackTrace();
// }
//
// if (StringUtils.isEmpty(url)) {
// return null;
// }
// return url.toString();
// }
#获取所有的对象(根据桶和前缀)
public List<S3Object> ListObjects(String bucket, String prefix) {
S3Client s3Client = this.createClient();
List<S3Object> contents = null;
try {
ListObjectsV2Request request = ListObjectsV2Request.builder().bucket(bucket).prefix(prefix).build();
ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(request);
contents = listObjectsV2Response.contents();
} finally {
this.closeClient(s3Client);
}
return contents;
}
#上传对象
public void putObject(String bucket, String key, String content) {
S3Client s3Client = this.createClient();
try {
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes(StandardCharsets.UTF_8));
PutObjectResponse putObjectResponse =
s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key)
.build(),
RequestBody.fromByteBuffer(byteBuffer));
} finally {
this.closeClient(s3);
}
}
#上传文件
public void putFile(String filePath, String key, String bucket) {
S3Client s3Client = this.createClient();
File tempFile = new File(filePath);
try {
PutObjectResponse putObjectResponse =
s3Client.putObject(PutObjectRequest.builder().bucket(bucket).key(key)
.build(),
RequestBody.fromFile(tempFile));
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeClient(s3Client);
}
}
#获取对象大小
@Override
public long getS3ObjectLength(String bucket, String key) {
S3Client s3Client = this.createClient();
long size = 0;
try {
List<S3Object> s3Objects = this.ListObjects(s3, bucket, key);
size = s3Objects.get(0).size();
}catch (Exception e){
e.printStackTrace();
}finally {
this.closeClient(s3);
}
return size;
}
# 获取对象
public String getObject(String bucket, String key) {
S3Client s3Client = this.createClient();
try {
ResponseBytes<GetObjectResponse> responseResponseBytes = s3.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(),
ResponseTransformer.toBytes()); # ResponseTransformer.toBytes() 将响应转换为二进制流
return this.decode(responseResponseBytes.asByteBuffer());
} finally {
this.closeClient(s3);
}
}
# 获取对象的流
@Override
public InputStream getInputStream(String bucket, String key) {
S3Client s3Client = this.createClient();
try {
ResponseBytes<GetObjectResponse> responseResponseBytes = s3.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(),
ResponseTransformer.toBytes());
return responseResponseBytes.asInputStream();
} finally {
this.closeClient(s3);
}
}
#删除对象
public void deleteObject(String bucket, String key) {
S3Client s3Client = this.createClient();
try {
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucket).key(key).build();
DeleteObjectResponse deleteObjectResponse = s3.deleteObject(deleteObjectRequest);
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeClient(s3);
}
}
#批量删除对象
public void deleteObjects(List<String> buckets, String key) {
S3Client s3Client = this.createClient();
try {
String prefix = key.substring(0, key.lastIndexOf(File.separator));
for (String bucket : buckets) {
ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder().bucket(bucket).prefix(prefix).build();
ListObjectsResponse listObjectsResponse = s3.listObjects(listObjectsRequest);
List<S3Object> contents = listObjectsResponse.contents();
for (S3Object content : contents) {
String objectKey = content.key();
this.deleteObject(s3, bucket, objectKey);
}
this.deleteObject(s3, bucket, prefix);
}
} finally {
this.closeClient(s3);
}
}
}
public String decode(ByteBuffer byteBuffer) {
Charset charset = StandardCharsets.UTF_8;
return charset.decode(byteBuffer).toString();
}
其中 minIoAccessKey,minIoSecretKey, minIoUrl;分别对应账号、密码、请求地址。需要对应自己的相关信息。