1.配置S3信息并进行连接
package com.demo.common.utils.aws;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AwsConfig {
@Value("${s3.awsAccessKey}")
private String awsAccessKey;
@Value("${s3.awsSecretKey}")
private String awsSecretKey;
@Bean
public AmazonS3 amazonS3() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withRegion(Regions.AP_SOUTHEAST_1).withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
return amazonS3;
}
}
2.对s3桶的基本操作
package com.demo.common.utils.aws;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.s3.model.analytics.AnalyticsConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class AwsS3Bucket {
@Autowired
public AmazonS3 s3;
@Value("${s3.bucketName}")
private String bucketName;
private String region = Regions.AP_SOUTHEAST_1.getName();
public void listBuckets() {
List<Bucket> buckets = s3.listBuckets();
buckets.forEach(item -> {
System.out.println(item.toString());
});
}
public void createBucketBase() {
Bucket bucket = s3.createBucket(bucketName);
System.out.println(bucket.toString());
}
public void createBucketWithParams() {
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName, region);
createBucketRequest.setObjectLockEnabledForBucket(true);
Bucket bucket = s3.createBucket(createBucketRequest);
System.out.println(bucket.toString());
}
public void deleteBucket() {
DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest(bucketName);
s3.deleteBucket(deleteBucketRequest);
System.out.println("delete bucket success");
}
public void configBucket() {
BucketAccelerateConfiguration bucketAccelerateConfiguration = new BucketAccelerateConfiguration(BucketAccelerateStatus.Enabled);
s3.setBucketAccelerateConfiguration(bucketName, bucketAccelerateConfiguration);
SetBucketAclRequest setBucketAclRequest = new SetBucketAclRequest(bucketName, CannedAccessControlList.Private);
s3.setBucketAcl(setBucketAclRequest);
AccessControlList accessControlList = new AccessControlList();
accessControlList.setRequesterCharged(true);
accessControlList.setOwner(null);
SetBucketAclRequest setBucketAclRequest2 = new SetBucketAclRequest(bucketName, accessControlList);
s3.setBucketAcl(setBucketAclRequest2);
AnalyticsConfiguration analyticsConfiguration = new AnalyticsConfiguration();
analyticsConfiguration.setId(null);
SetBucketAnalyticsConfigurationRequest setBucketAnalyticsConfigurationRequest = new SetBucketAnalyticsConfigurationRequest(bucketName, analyticsConfiguration);
s3.setBucketAnalyticsConfiguration(setBucketAnalyticsConfigurationRequest);
BucketLifecycleConfiguration bucketLifecycleConfiguration = new BucketLifecycleConfiguration();
List<BucketLifecycleConfiguration.Rule> rules = new ArrayList();
BucketLifecycleConfiguration.Rule rule = new BucketLifecycleConfiguration.Rule().withId(null);
rules.add(rule);
bucketLifecycleConfiguration.setRules(rules);
SetBucketLifecycleConfigurationRequest setBucketLifecycleConfigurationRequest = new SetBucketLifecycleConfigurationRequest(bucketName, bucketLifecycleConfiguration);
s3.setBucketLifecycleConfiguration(setBucketLifecycleConfigurationRequest);
SetBucketEncryptionRequest setBucketEncryptionRequest = new SetBucketEncryptionRequest();
setBucketEncryptionRequest.setBucketName(bucketName);
ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = new ServerSideEncryptionConfiguration();
serverSideEncryptionConfiguration.setRules(null);
setBucketEncryptionRequest.setServerSideEncryptionConfiguration(serverSideEncryptionConfiguration);
s3.setBucketEncryption(setBucketEncryptionRequest);
BucketVersioningConfiguration bucketVersioningConfiguration = new BucketVersioningConfiguration();
bucketVersioningConfiguration.setMfaDeleteEnabled(true);
bucketVersioningConfiguration.setStatus(BucketVersioningConfiguration.ENABLED);
SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName, bucketVersioningConfiguration);
s3.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
s3.setBucketPolicy(null);
s3.setBucketLoggingConfiguration(null);
s3.setBucketNotificationConfiguration(null);
s3.setBucketReplicationConfiguration(null);
s3.setBucketTaggingConfiguration(null);
s3.setBucketWebsiteConfiguration(null);
s3.setBucketMetricsConfiguration(null);
}
}
3.对S3桶中文件的基本操作
package com.demo.common.utils.aws;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.List;
@Slf4j
@Component
public class AwsS3File {
@Autowired
private AmazonS3 s3;
@Value("${s3.bucketName}")
private String bucketName;
private String key = "test/test";
private String localFilePath = "/Users/yz/Documents/";
public void listFiles() {
String prefix = "";
ObjectListing objectListing = s3.listObjects(bucketName);
List<S3ObjectSummary> s3ObjectSummaryList = objectListing.getObjectSummaries();
s3ObjectSummaryList.forEach(item -> {
System.out.print(item.getKey() + ",");
System.out.println(item.getETag());
});
}
public String uploadFile(File file, String content) {
String filePath = file.getAbsolutePath();
String key = content + "/" + filePath.substring(filePath.lastIndexOf("/") + 1,filePath.indexOf("."));
log.info("上传文件到s3的请求参数为:file:{},content:{},key:{}",file,content,key);
try{
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
PutObjectResult putObjectResult = s3.putObject(putObjectRequest);
log.info("获取上传后文件路径地址");
String fileUrl = getUrlFromS3(key);
return fileUrl;
}catch (Exception e){
log.info("执行上传和获取文件链接异常:{}",e.getMessage());
}
return null;
}
public String getUrlFromS3(String key) throws IOException {
try {
GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(bucketName, key);
String url = s3.generatePresignedUrl(httpRequest).toString();
return url;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void deleteFile() {
s3.deleteObject(bucketName, key);
}
public S3Object downloadFile() throws IOException {
S3Object s3Object = s3.getObject(bucketName, key);
S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent();
ObjectMetadata objectMetadata = s3Object.getObjectMetadata();
System.out.println(s3Object.getKey());
System.out.println(s3Object.getBucketName());
System.out.println(s3Object.getRedirectLocation());
System.out.println(s3Object.getTaggingCount());
return s3Object;
}
public void downloadFileWithPrint(String content, String remoteFileName) throws IOException {
String key = content + "/" + remoteFileName;
S3Object s3Object = s3.getObject(bucketName, key);
S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent();
StringBuffer stringBuffer = new StringBuffer();
byte[] buffer = new byte[1024];
while ((s3ObjectInputStream.read(buffer)) != -1) {
stringBuffer.append(new String(buffer, "UTF-8"));
}
s3ObjectInputStream.close();
System.out.println(stringBuffer.toString().trim());
}
public void downloadFileWithSave(String content, String remoteFileName) throws IOException {
String key = content + "/" + remoteFileName;
S3Object s3Object = s3.getObject(bucketName, key);
S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent();
OutputStream os = null;
try {
String fileName = s3Object.getKey().substring(s3Object.getKey().lastIndexOf("/"));
os = new FileOutputStream(new File(localFilePath + "s3/" + fileName));
byte[] buffer = new byte[1024];
while ((s3ObjectInputStream.read(buffer)) != -1) {
os.write(buffer);
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
os.close();
}
if (s3ObjectInputStream != null) {
s3ObjectInputStream.close();
}
}
}
public void copyFile() {
String sourceBucketName = bucketName;
String sourceKey = key;
String sourceVersionId = null;
String destinationBucketName = bucketName;
String destinationKey = key;
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceKey, sourceVersionId, destinationBucketName, destinationKey);
CopyObjectResult copyObjectResult = s3.copyObject(copyObjectRequest);
System.out.println(copyObjectResult.toString());
}
}