2016-09-07 180 views
3

我想上传到亚马逊的图像(AWS SDK 2.3.0)通过使用下面的代码Android的亚马逊S3 TransferUtility

 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); 

每次我试着上传图片我碰到下面的错误S3

上传任务:无法上传:37由于您提供的授权机制不受支持。请使用AWS4-HMAC-SHA256。 (服务:亚马逊S3;状态代码:400;错误代码:InvalidRequest;请求ID:9787E53737D02BA7)

我以为这只会是与旧版本的SDK AWS的问题。经过无数小时的努力修复后,我发现了下面的“诡计”,但这只是导致我出现了另一个错误,根本不需要。

 System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true"); 
+0

嗯,我想出了是什么导致了这个问题,我的桶位于法兰克福,我只是试着用另一个桶在爱尔兰测试它工作完美无瑕atles现在是一个修复。 – ntheg0d

回答

1

您可以上传图片到Amazon S3具有以下snipet(请确保您没有做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); 

如果你想为什么你的方法不会工作的更多信息你可以参考this link

+0

我认为建议使用CognitoCachingCredentialsProvider而不是硬核凭证了? – ntheg0d