SpringBoot整合aws的示例代码

网友投稿 1184 2022-11-18

SpringBoot整合aws的示例代码

SpringBoot整合aws的示例代码

业务需求

将本地的一些文件保存到aws上

引入依赖

创建client

工具类

引入依赖

software.amazon.awssdk

s3

com.amazonaws

aws-java-sdk-s3

com.amazonaws

aws-java-sdk-sqs

software.amazon.awssdk

sns

com.amazonaws

aws-java-sdk-cloudfront

创建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 (AmazonServiceExceptionhttp:// 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 ListObjects(String bucket, String prefix) {

S3Client s3Client = this.createClient();

List 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 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 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 responseResponseBytes = s3.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(),

ResponseTransformer.toBytes());

return responseResponseBytes.asInputStreaoFhvnQDeDm();

} 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 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 contents = listObjectsResponse.contents();

for (S3Object content : contents) {

String objectKey = content.key();

this.deleteObject(s3, bucket, objectKey);

http:// }

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;分别对应账号、密码、请求地址。需要对应自己的相关信息。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)
下一篇:【LeetCode 104】 二叉树的最大深度
相关文章

 发表评论

暂时没有评论,来抢沙发吧~