Android Amazon S3 TransferUtility

3
我正在尝试使用以下代码将图像上传到亚马逊(AWS SDK 2.3.0)S3。
        CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(),
            "XXXXXXX",
            // Identity Pool ID
            Regions.EU_WEST_1 // Region
    );
    AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);

    TransferUtility transferUtility = new TransferUtility(s3Client, this.
            getApplicationContext());

    TransferObserver observer = transferUtility.upload("testbucketzzzz", "test.jpg",
            file);

每次我尝试上传图片时,都会出现以下错误:

UploadTask: 由于您提供的授权机制不受支持,因此上传失败:37。请使用 AWS4-HMAC-SHA256。(服务:Amazon S3;状态码:400;错误代码:InvalidRequest;请求 ID:9787E53737D02BA7)

我以为这只会是AWS SDK旧版本的问题。经过无数个小时的尝试修复,我找到了以下“技巧”,但这只会导致另一个错误,并且根本不需要这样做。
        System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");

1
我找出了问题的原因,我的存储桶位于法兰克福,我刚刚尝试使用爱尔兰的另一个存储桶进行测试,结果完美无缺,至少现在有了一个解决方法。 - ntheg0d
1个回答

1
您可以使用以下代码片段将图像上传到Amazon S3(确保您不要在MainThread中执行此操作):
    BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
          ACCESS_KEY,
          SECRET_KEY
      );
    AmazonS3Client s3Client = new AmazonS3Client(basicAWSCredentials);
      s3Client.setEndpoint(ENDPOINT);
      s3Client.setRegion(Region.getRegion(Regions.EU_WEST_1));;
    PutObjectRequest por = new PutObjectRequest(
                "YOUR_BUCKET_NAME", "YOUR_KEY", file);
    }
    s3Client.putObject(por);

如果您想了解为什么您的方法行不通,可以参考此链接获取更多信息。


1
我认为现在推荐使用CognitoCachingCredentialsProvider而不是硬编码凭据了吧? - ntheg0d
你为什么将这个答案标记为正确答案? - Uriel Frankel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接