Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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

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 s3sdk能否找到一个bucket';这是一个独立的区域吗?_Java_Amazon S3 - Fatal编程技术网

Java s3sdk能否找到一个bucket';这是一个独立的区域吗?

Java s3sdk能否找到一个bucket';这是一个独立的区域吗?,java,amazon-s3,Java,Amazon S3,我正在编写一个AmazonS3客户端,它可能访问不同地区的存储桶。我们的IT部门对传出HTTP的要求相当严格,我希望对该客户端使用路径式访问,以避免对每个新bucket进行防火墙更改 我的客户机使用java SDK v1.4.4.2。作为测试,我在新加坡创建了一个bucket,然后进行了一个列出对象的S3单元测试,并将其更改为使用路径样式访问: AmazonS3 client = new AmazonS3Client(environ); client.setS3ClientOptions(new

我正在编写一个AmazonS3客户端,它可能访问不同地区的存储桶。我们的IT部门对传出HTTP的要求相当严格,我希望对该客户端使用路径式访问,以避免对每个新bucket进行防火墙更改

我的客户机使用java SDK v1.4.4.2。作为测试,我在新加坡创建了一个bucket,然后进行了一个列出对象的S3单元测试,并将其更改为使用路径样式访问:

AmazonS3 client = new AmazonS3Client(environ);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
当我使用这个版本的客户端运行单元测试时,所有S3访问都失败,错误是我必须设置正确的端点

我的问题是,我是否必须添加逻辑来查找bucket的区域并为客户端设置该区域?或者可以将SDK设置为独立完成此操作?看起来SDK应该能够自动完成这项工作,因为查找bucket位置的功能就在这里

作为一个附带问题,使用路径样式访问是否存在任何特定的性能问题?如果我还不知道bucket的位置,我假设这只是一个额外的往返查询。

但是,正如中所述,路径样式语法要求您在尝试访问bucket时使用特定于区域的端点。换句话说,对于路径式访问,您必须告诉SDK哪个区域是bucket,而不是试图自己确定它


就性能而言,应该没有区别。

如果需要客户端访问不同区域中的对象,可能需要使用以下选项:

AmazonS3ClientBuilder builder.withForceGlobalBucketAccessEnabled(true)
要建立您的客户。。。看

即使客户机默认区域与目标bucket/object不同,这也可以确保请求成功

另外,如果需要获取bucket“mybucketname”的确切端点,可以使用():

s3client.headBucket(HeadBucketRequest("mybucketname")).getBucketRegion()