[英]Is it possible to use AWS SDK for Java 2 to create a presigned URL to access AliCloud/Aliyun OSS bucket content?
我正在嘗試使用 AWS SDK for Java 2 API 來訪問 S3。 我得到了它的大部分工作,除了presign URLs。
根據https://www.alibabacloud.com/help/doc-detail/31952.htm看起來有一個不同的查詢參數要構建。 看起來我必須使用他們的庫並有一個開關作為SignUtils的附加或重新實現部分。
顯然您可以使用 AWS 的庫來執行此操作。 您必須確保 Presigner 還具有endpointOverride
配置集。 這是我的代碼,我已經注釋了相關的地方
@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.