S3 SDK 1.x 2.x的预签名上传地址,地区设置,ACL权限设置,包能使用
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.12.609</version>
</dependency>
public String getApkUploadUrl() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String formattedDate = sdf.format(date);
String bucketName = "xxxxx"; // 设置存储桶名称
String objectKey = "logo/"+ UUID.randomUUID() + ".png"; // 设置对象路径(包括文件名)
Date expireDate = new Date(System.currentTimeMillis() + 300000);
AWSCredentials credentials = new BasicAWSCredentials("keyid", "key"); // 设置访问密钥
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
.withRegion(AP_SOUTHEAST_1)
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.build();
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(bucketName, objectKey)
.withMethod(HttpMethod.PUT)
.withExpiration(expireDate);
generatePresignedUrlRequest.addRequestParameter("x-amz-acl", "public-read");
URI presignedUri = null;
try {
presignedUri = s3client.generatePresignedUrl(generatePresignedUrlRequest).toURI();
} catch (URISyntaxException e) {
System.out.println(e.getMessage());
return "";
}
return presignedUri.toString();
}
SDK 2.X 的实现:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.21.42</version>
</dependency>
static String bucketName = "xxxx";
public static void main(String[] args) {
String objectKey = "apk/" + UUID.randomUUID() + ".apk"; // 设置对象路径(包括文件名)
String url = preview(bucketName, objectKey);
System.out.println(url);
}
// 获取aws供应商凭据
private static AwsCredentialsProviderChain getAwsCredentialsProviderChain(){
return AwsCredentialsProviderChain
.builder()
.addCredentialsProvider(() -> AwsBasicCredentials.create("appid", "appkey")).build();
}
private static S3Presigner getS3Presigner() {
return S3Presigner.builder()
.region(Region.AP_SOUTHEAST_1)
.credentialsProvider(getAwsCredentialsProviderChain())
.build();
}
private static String preview(String bucketName, String key) {
AwsRequestOverrideConfiguration override = AwsRequestOverrideConfiguration.builder()
.putRawQueryParameter("x-amz-acl", "public-read")
.build();
PutObjectRequest putObjectRequest =
PutObjectRequest.builder()
.overrideConfiguration(override)
.bucket(bucketName)
.key(key)
.acl(ObjectCannedACL.PUBLIC_READ)
.build();
PutObjectPresignRequest putObjectPresignRequest = PutObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(10))
.putObjectRequest(putObjectRequest)
.build();
PresignedPutObjectRequest presignedGetObjectRequest =
getS3Presigner().presignPutObject(putObjectPresignRequest);
return presignedGetObjectRequest.url().toString();
}