[英]Is it possible to use AWS SDK for Java 2 to create a presigned URL to access AliCloud/Aliyun OSS bucket content?
I am trying to use the AWS SDK for Java 2 API to access S3.我正在尝试使用 AWS SDK for Java 2 API 来访问 S3。 I got it working for the most part except for the presign URLs.
我得到了它的大部分工作,除了presign URLs。
Per https://www.alibabacloud.com/help/doc-detail/31952.htm it looks like there's a different query parameter to build.根据https://www.alibabacloud.com/help/doc-detail/31952.htm看起来有一个不同的查询参数要构建。 It looks like I have to use their library and have a switch as an add on or reimplement parts of SignUtils .
看起来我必须使用他们的库并有一个开关作为SignUtils的附加或重新实现部分。
Apparently you can use AWS's library to do this.显然您可以使用 AWS 的库来执行此操作。 You have to make sure the Presigner also has the
endpointOverride
configuration set.您必须确保 Presigner 还具有
endpointOverride
配置集。 Here's the code I have and I have annotated the relevant places这是我的代码,我已经注释了相关的地方
@Configuration
@Slf4j
public class S3ClientConfiguration {
// SPECIFY OVERRIDE
@Value("${aws.s3.portfolio.endpoint:#{null}}")
private URI endpointOverride;
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3AsyncClient amazonS3AsyncClient(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider,
final ClientOverrideConfiguration clientOverrideConfiguration) {
final S3AsyncClientBuilder builder = S3AsyncClient.builder()
.credentialsProvider(credentialsProvider)
.overrideConfiguration(clientOverrideConfiguration)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3Client amazonS3Client(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider,
final ClientOverrideConfiguration clientOverrideConfiguration) {
final S3ClientBuilder builder = S3Client.builder()
.credentialsProvider(credentialsProvider)
.overrideConfiguration(clientOverrideConfiguration)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
public ClientOverrideConfiguration clientOverrideConfiguration(final HttpTracing httpTracing) {
final var awsSdkTracing = AwsSdkTracing.create(httpTracing);
return ClientOverrideConfiguration.builder()
.addExecutionInterceptor(awsSdkTracing.executionInterceptor())
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public AwsCredentialsProvider credentialsProvider() {
return DefaultCredentialsProvider.create();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3Presigner presigner(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider) {
final var builder = S3Presigner.builder()
.credentialsProvider(credentialsProvider)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public AwsRegionProvider regionProvider() {
return DefaultAwsRegionProviderChain.builder().build();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.