Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java SDK Amazon S3中配置路径样式_Java_Amazon S3_Amazon Web Services - Fatal编程技术网

在Java SDK Amazon S3中配置路径样式

在Java SDK Amazon S3中配置路径样式,java,amazon-s3,amazon-web-services,Java,Amazon S3,Amazon Web Services,我正在使用Amazon提供的与S3服务交互 默认情况下,SDK对bucket使用虚拟主机样式(即bucket-name.s3.amazonaws.com引用bucket)。示例: PUT / HTTP/1.1 Host: a-given-bucket.s3.amazonaws.com Date: Tue, 26 Jun 2012 10:39:40 GMT Content-Type: application/x-www-form-urlencoded; charset=utf-8 Content-

我正在使用Amazon提供的与S3服务交互

默认情况下,SDK对bucket使用虚拟主机样式(即bucket-name.s3.amazonaws.com引用bucket)。示例:

PUT / HTTP/1.1
Host: a-given-bucket.s3.amazonaws.com
Date: Tue, 26 Jun 2012 10:39:40 GMT
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 0
但是,我需要在应用程序中使用路径样式,如下所示:

PUT /a-given-bucket/ HTTP/1.1
Host: s3.amazonaws.com
Date: Thu, 21 Jun 2012 16:27:32 GMT
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 0
有可能在Java SDK中使用路径样式吗?在积极的情况下,我该怎么做?我已经看过ClientConfiguration和AmazonS3Client类,但我没有看到任何方法可以做到这一点

我的SDK版本是:2.0.0v201206151133

谢谢


费尔明

为了简单起见,样本中省略了一些标题

编辑:
这样的功能(用于配置AmazonS3Client使用的URL路径样式)在存储桶中带有点(“.”)的情况下非常有用。具有虚拟主机样式的HTTPS请求不起作用,请参阅和。

无法强制V1(路径样式)使用Java SDK进行bucket寻址。唯一的例外是当您的bucket名称不可DNS寻址时,在这种情况下,SDK将自动使用V1寻址。例如,当您的bucket名称包含句点时(因此不鼓励使用句点)

如果需要此功能,则必须修改
AmazonS3Client
类以允许此功能

但是,我不确定我是否相信你的说法,你“需要”使用V1 bucket寻址。SDK已经处理了所有需要V1寻址的情况——或者如果你发现了一个不需要V1寻址的情况,请在论坛上告诉我们

不推荐使用PathStyleAccess方法。请改用以下方法:

AmazonS3 s3client = AmazonS3Client.builder()
            .withCredentials((new AWSStaticCredentialsProvider(credentials)))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("host", "region"))
            .withPathStyleAccessEnabled(true)
            .build();

不推荐的方法:

现在这是可能的,我不确定它是什么时候引入的,但它至少在JavaAWSSDK的1.7.8版本中可用

只需访问您的AmazonS3实例:

AmazonS3 client = new AmazonS3Client(credentials);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));

对于SDK v2,您可以通过以下操作启用路径样式:

    public S3Client build() {

        final S3Configuration config = S3Configuration.builder()
                .pathStyleAccessEnabled(true)
                .build();

        return S3Client.builder()
                .serviceConfiguration(config)
                // other set up
                .build();
    }

亚马逊计划从2020年9月开始反对路径式访问,但这一反对已被推迟:

也在AWS开发者论坛上发布:亲爱的@Zach,您可能会拒绝它,但只要其他兼容解决方案和AWS SDK能够很好地集成,人们通常会实施需要能够使用AWS S3的软件要点。例如,IBM SpectrumScale具有S3仿真支持。你可以说“为什么我们需要支持第三方解决方案”。换一种方式思考:为什么人们应该迁移到AWS S3?只有当他们能够放置允许转换的SDK时,他们才能这样做。这需要对现有存储的全面支持,这些存储在仿真模式下工作,具有一定的兼容性,我认为问题。这也不是真的,路径式访问可以按照@oggmonster答案强制执行