简体   繁体   English

是否可以使用AWS SDK for Java 2 创建一个预签名的URL来访问阿里云/阿里云OSS存储桶内容?

[英]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.

相关问题 AWS Java SDK 2.0 为 S3 对象创建预签名 URL - AWS Java SDK 2.0 create a presigned URL for a S3 object How to generate PUT presigned URL for an object when bucket has object lock enabled using AWS SDK 2 for java - How to generate PUT presigned URL for an object when bucket has object lock enabled using AWS SDK 2 for java AWS Java SDK 2.0 S3 预签名 URL 公共 object 访问 - AWS Java SDK 2.0 S3 presigned URL public object access 无法使用Java sdk在AWS S3上使用预签名的URL上传 - unable to upload with presigned url on aws s3 with java sdk 在 aws s3 存储桶中创建分段上传到预签名 url 的最佳方法是什么? - What is the best way to create multipart upload to a presigned url in aws s3 bucket? 使用其 Java SDK 列出阿里巴巴 OSS Bucket 中的所有对象 - List all objects in Alibaba OSS Bucket using its Java SDK 如何在 Java AWS S3 SDK 预签名 url 中设置策略条件 - How to set Policy conditions in Java AWS S3 SDK presigned url AWS Lambda:可以使用Oracle Java SDK吗? - AWS Lambda: it is possible to use Oracle Java SDK? 使用 Java 从 S3 存储桶和 HTTP PUT 文件读取文件到预签名的 AWS S3 URL 以模拟实际文件上传的方式另一个存储桶 - Read a file using Java from an S3 bucket and HTTP PUT file to presigned AWS S3 URL of another bucket in a way that simulates an actual file upload AWS S3 预签名 URL 文件上传 - 在存储桶中保留文件名 - AWS S3 Presigned URL file upload - Retain file name in bucket
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM