2017-02-24 12 views
1

このプロジェクトでは、Amazon Webサービスを設定しました。 Androidアプリケーション側では、サーバーからイメージを取得するためにs3 urlを生成する必要があります。以下のコードを使用すると、イメージを取得しようとしていますが、署名が失敗した場合やその他の例外が発生するたびに、S3 URLを生成してAndroidで画像を取得する

//Set the google token in map 
      Map<String, String> logins = new HashMap<>(); 
      logins.put(AppConstants.GOOGLE_CONSTANT, token); 

      //Initialize amazon cognito credentials provider 
      CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
        activity, // Context 
        AppConstants.IDENTITY_POOL_ID, // Identity Pool ID 
        Regions.US_EAST_1 // Region 
      ); 

      //Set the google credentials 
      credentialsProvider.setLogins(logins); 

AmazonS3 s3client = new AmazonS3Client(credentialsProvider); 

java.util.Date expiration = new java.util.Date(); 
long msec = expiration.getTime(); 
msec += 1000 * 60 * 60; // 1 hour. 
expiration.setTime(msec); 

GeneratePresignedUrlRequest generatePresignedUrlRequest = 
      new GeneratePresignedUrlRequest(bucketName, objectKey); 
generatePresignedUrlRequest.setMethod(HttpMethod.GET); // Default. 
generatePresignedUrlRequest.setExpiration(expiration); 

URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest); 

ここで、ブラウザで受信URLを読み込もうとすると、Signatureエラーが発生します。

問題はすべてJava用です。私はAndroidのための特定のヘルプを見つけませんでした。

私は、次のサイトに言及している https://aws.amazon.com/blogs/developer/generating-amazon-s3-pre-signed-urls-with-sse-kms-part-2/ http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html

答えて

0

あなたは事前に署名GETのURLを取得するために以下のコードを使用することができます。

URL presignedUrl = s3.generatePresignedUrl(
      bucketName, key, new Date(new Date().getTime() + 1000 * 60 * 60)); 
System.out.println(presignedUrl.toExternalForm()); 

HttpURLConnection connection = connectToPresignedUrl(
      s3, new GeneratePresignedUrlRequest(bucketName, key)); 
assertEquals(200, connection.getResponseCode()); 
関連する問題