最近公司用到亞馬遜 s3文件服務(wù)器,在這里記錄一下其使用過程。
1.AWS的創(chuàng)建和訪問密鑰,憑證的獲取
在Java服務(wù)端中使用AWS SDK for Java前需要為它提供憑證,憑證從AWS個(gè)人賬戶中生成,每頁賬戶的話,打開 AWS云服務(wù)進(jìn)行注冊,新增IAM用戶并創(chuàng)建密鑰。
詳情請見[https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/signup-create-iam-user.html]
2.AWS SDK for Java的使用
POM中導(dǎo)入相關(guān)依賴
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.393</version>
</dependency>
yaml配置文件中進(jìn)行相應(yīng)參數(shù)的配置,使用@Value注解獲取數(shù)據(jù)

application.yml

AwsUtils.java
注意這里如果使用@value注解獲取ymal中參數(shù)時(shí),需要在類名前加@Component,調(diào)用該類時(shí)也需要使用@Autowired方式進(jìn)行注入,而非new一個(gè)對象。
文件上傳的實(shí)現(xiàn):
public AmazonS3 getS3() {
AmazonS3 amazonS3 = new AmazonS3Client(new BasicAWSCredentials(this.AWS_ACCESS_KEY, this.AWS_SECRET_KEY));
Region usWest2 = Region.getRegion(Regions.CN_NORTH_1);
amazonS3.setRegion(usWest2);
amazonS3.setEndpoint(this.ENDPOINT);
return amazonS3;
}
/**
* @param @param tempFile 目標(biāo)文件
* @param @param remoteFileName 文件名
* @param @return
* @param @throws IOException 設(shè)定文件
* @return String 返回類型
* @throws
* @Title: uploadToS3
* @Description: 將文件上傳至S3上并且返回url
*/
public String uploadToS3(MultipartFile tempFile,String remoteFileName) throws IOException {
s3 = getS3();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(tempFile.getContentType());
metadata.setContentLength(tempFile.getSize());
String type = tempFile.getContentType().split("/")[0];
remoteFileName = type+"/"+remoteFileName; //通過getContentType()獲取文件類型并按照類型自動(dòng)存放到相應(yīng)文件夾中
try {
//上傳文件
s3.putObject(new PutObjectRequest(BUCKET_NAME,remoteFileName,tempFile.getInputStream(),metadata).withCannedAcl(CannedAccessControlList.PublicRead));
//獲取一個(gè)request
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
BUCKET_NAME, remoteFileName);
//生成公用的url
URL url = s3.generatePresignedUrl(urlRequest);
System.out.println("URL:" + url);
return url.toString();
} catch (AmazonServiceException ase) {
ase.printStackTrace();
} catch (AmazonClientException ace) {
ace.printStackTrace();
}
return null;
}
/**
* c查找s3上名稱為bucketName的Bucket里的所有對象
*
* @param amazonS3
* @param bucketName
* @return
*/
public void getObjectList(){
s3 = getS3();
try{
ObjectListing ol = s3.listObjects(BUCKET_NAME);
List<S3ObjectSummary> objects = ol.getObjectSummaries();
for (S3ObjectSummary os: objects) {
System.out.println("* " + os.getKey());
}
}catch (Exception e){
e.printStackTrace();
}
}
S3的中文說明文檔在這里Amazon S3,記錄一下,以后慢慢消化。