Amazone S3 ,弄好了感觉用起来还行,没弄好神烦
Tip:上传出错,region记录找不到,location xxx的等让人抓头发的问题,第一时间升级版本
贴一下依赖吧,仅需要依赖这一个jar包,注意版本,当前是maven中央库的最新版
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.688</version>
</dependency>
接下来就是创建aws相关的对象了
- 创建认证对象 AWSCredentials
还有别的方式去创建此对象,比如读当前用户下的.aws配置文件、读环境变量的方式
new BasicAWSCredentials(accessKey, accessSecret)
- 创建对象 AmazonS3
AmazonS3Client.builder()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(region)
.build();
- 上传文件,获取访问链接
try {
if(!checkBucketExists(s3, bucketName)){
createBucket(s3, bucketName);
}
s3.putObject(new PutObjectRequest(bucketName, objectKey, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey);
s3.generatePresignedUrl(urlRequest);
URL url = s3.getUrl(bucketName, objectKey);
return url.toString();
} catch (AmazonClientException ase) {
ase.printStackTrace();
}
上面代码中,最后返回的结果是不包含链接过期等信息的,链接可公开访问,会不会过期未测,才上传
其中还有bucket是否存在的校验,代码如下:
/**
* 创建bucket
* @param s3
* @param bucketName
*/
private static void createBucket(AmazonS3 s3, String bucketName) {
s3.createBucket(bucketName);
}
/**
* 验证s3上是否存在名称为bucketName的Bucket
* @param s3
* @param bucketName
* @return
*/
private static boolean checkBucketExists (AmazonS3 s3, String bucketName) {
List<Bucket> buckets = s3.listBuckets();
for (Bucket bucket : buckets) {
if (Objects.equals(bucket.getName(), bucketName)) {
return true;
}
}
return false;
}
到此结束,踩的坑,主要是因为aws-java-sdk的版本低了