2016-09-07 269 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