首先引入依赖
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.18.8</version>
</dependency>
上传下载
/**
* 上传文件
*/
public File uploadFile(MultipartFile multipartFile, String location) {
try {
S3Client s3Client = getS3Client();
s3Client.putObject(PutObjectRequest
.builder()
.bucket(bucketName)
.key(location + "/" + multipartFile.getOriginalFilename())
.contentLength(multipartFile.getSize())
.contentType(multipartFile.getContentType())
.build()
, RequestBody.fromBytes(multipartFile.getBytes()));
} catch (Exception e) {
log.error("s3Client上传文件File模式异常 " + e.getMessage(), e);
}
return file;
}
/*
*下载
*/
public byte[] getDownloadFile(String bucketName, String key) {
S3Client s3Client = getS3Client();
ResponseBytes<GetObjectResponse> responseBytes = s3Client.getObjectAsBytes(GetObjectRequest.builder().bucket(bucketName).key(key).build());
return responseBytes.asByteArray();
}
// 获取连接
public static S3Client getS3Client() {
return S3Client.builder()
.region(Region.AP_SOUTHEAST_1)
.credentialsProvider(new AwsCredentialsProvider() {
@Override
public AwsCredentials resolveCredentials() {
return AwsBasicCredentials.create(accessKey, secretKey);
}
})
.build();
}
/**
* 文件移动
* @param searchFolder 源文件地址
* @param bakFolder 新地址前一个文件夹
* @param downloadFileName 文件名
* @param rootFolder 新地址
*/
public void moveFileToDir(String searchFolder,String bakFolder, String downloadFileName, String rootFolder) {
S3Client s3Client = getS3Client();
String oldPath = searchFolder + downloadFileName;
String newPath = searchFolder + bakFolder + "/" + rootFolder + "/" + downloadFileName;
s3Client.copyObject(CopyObjectRequest.builder().sourceBucket(bucketName).sourceKey(oldPath)
.destinationBucket(bucketName).destinationKey(newPath).build());
// 判断转移文件成功就删除旧位置
ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(
ListObjectsV2Request.builder()
.bucket(bucketName).prefix(newPath).build());
List<S3Object> contents = listObjectsV2Response.contents();
if (CollectionUtil.isNotEmpty(contents)) {
s3Client.deleteObject(DeleteObjectRequest.builder().bucket(bucketName).key(searchFolder + downloadFileName).build());
}
}