【问题标题】:AWS S3DownloadTask is Unable to resolve host: No address associated with hostnameAWS S3DownloadTask 无法解析主机:没有与主机名关联的地址
【发布时间】:2016-02-12 05:15:32
【问题描述】:

我正在尝试从我在 Android 上的 Amazon S3 存储桶下载,但我收到了这个错误:

java.net.UnknownHostException: Unable to resolve host "cognito-identity.us-west-2.amazonaws.com": No address associated with hostname

在这一行

Download down = manager.download(AWSClientManager.S3_BUCKET_NAME, fileToDownload, file);

我不确定为什么当我的 CognitoCachingCredentialsProvider 的默认值为 us- 时它会使用 us-west-2东一号

即便如此,我的 s3 存储的以下位置具有完全相同的文件:

https://console.aws.amazon.com/s3/home?region=us-east-1
https://console.aws.amazon.com/s3/home?region=us-west-2

我不知道为什么会出现上述错误,有人可以帮忙吗?

嗨@马克, 我的 CognitoCachingCredentialsProvider 设置为 US_EAST_1

我正在使用 AmazonS3Client 下载 S3 文件。我认为这可能是问题所在。我明确设置了区域,尽管它似乎完全无视这一点。

这是我的错误代码:

private S3TaskResult downloadResources(String fileToDownload) {

        S3TaskResult result = new S3TaskResult();
        File file = new File(downloadDirectory, fileToDownload);

        try {

            manager.getAmazonS3Client().setRegion(com.amazonaws.regions.Region.getRegion(Regions.US_EAST_1));
            Download down = manager.download(AWSClientManager.S3_BUCKET_NAME, fileToDownload, file);
            down.addProgressListener(this);
            down.waitForCompletion();

        } catch (Exception e) { 
            // TODO:  FIGURE OUT WHY IT ERRORS HERE :(
            result.setErrorMessage(e.getMessage()); 
        }

        return result;
    }

【问题讨论】:

  • fwiw:控制台区域在查看 S3 时没有传达任何有意义的信息,并且 us-west-2 没有 cognito identity endpoint 所以错误是准确的,尽管我意识到那是'没有太多的安慰——不清楚为什么你的代码试图使用 us-west-2。
  • 感谢 Michael 的帮助,您提供的链接让我对 AWS 端点有了更深入的了解 :) 干杯

标签: android amazon-web-services amazon-s3 amazon-cognito


【解决方案1】:

问题似乎是您尝试使用 Amazon Cognito 是 us-west-2。

java.net.UnknownHostException: Unable to resolve host "cognito-identity.us-west-2.amazonaws.com": No address associated with hostname

目前,Amazon Cognito 仅在 us-east-1、eu-west-1 和 ap-northeast-1 中可用。

这并不意味着您不能使用 Cognito 凭证访问其他区域中的 S3 存储桶,您只需将 Cognito 设置为使用上述区域之一(并在该区域中设置您的身份池)。然后将您的 S3 客户端设置为使用您的存储桶所在的任何区域。

确保您使用正确的区域设置凭据提供程序:

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
   getApplicationContext(), // Context
   "IDENTITY_POOL_ID", // Identity Pool ID
   Regions.US_EAST_1 // Region
);

如此处所述:http://docs.aws.amazon.com/cognito/devguide/identity/getting-credentials/

【讨论】:

  • 我将把它标记为答案,因为它是正确的。我遇到的问题是我在我的启动类(用户已经登录然后重新打开应用程序时使用的代码)和我的登录类上的 US_EAST_1 将区域设置为默认值。我忘了检查我的启动课程:(我将启动课程更改为 US_EAST_1 并且它起作用了 :) 我知道这是我忽略的东西,但就是找不到它在哪里。感谢您的帮助
  • 你太棒了......救生员
猜你喜欢
  • 1970-01-01
  • 2017-12-04
  • 2018-12-04
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
相关资源
最近更新 更多