2016-06-21 7 views
3

S3バケットのオブジェクトをコピーするためのRESTベースのアクセス用の私の現在のコードは機能しません。私のS3バケットはhttpsアクセス用に設定されており、sseが有効になっています。それを動作させるには、以下のコードをどのように変更すればよいですか? 現在のところ、「AmazonClientExceptionが発生しました」というエラーメッセージが表示されます。これは、ネットワークにアクセスできないなど、S3と通信しようとしているときにクライアントでエラーが発生したことを意味します。 mybucket.s3.amazonaws.com」それを解決https接続のあるAmazon S3 SDK

@PUT 
    @Path("/copy/{bucketName}") 
    public void copyObject(@PathParam("bucketName") String bucketName, @QueryParam("fromPath") String fromPath, 
      @QueryParam("toPath") String toPath) throws AmazonClientException { 

     AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain()); 
     try { 

      CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, fromPath, bucketName, toPath); 
      System.out.println("Copying object."); 

      s3client.copyObject(copyObjRequest); 

     } catch (AmazonServiceException ase) { 
      System.out.println("Caught an AmazonServiceException, " + "which means your request made it " 
        + "to Amazon S3, but was rejected with an error " + "response for some reason."); 
      System.out.println("Error Message: " + ase.getMessage()); 
      System.out.println("HTTP Status Code: " + ase.getStatusCode()); 
      System.out.println("AWS Error Code: " + ase.getErrorCode()); 
      System.out.println("Error Type:  " + ase.getErrorType()); 
      System.out.println("Request ID:  " + ase.getRequestId()); 
     } catch (AmazonClientException ace) { 
      System.out.println("Caught an AmazonClientException, " + "which means the client encountered " 
        + "an internal error while trying to " + " communicate with S3, " 
        + "such as not being able to access the network."); 
      System.out.println("Error Message: " + ace.getMessage()); 
     } 
    } 
+0

使用しているSDKとそのバージョンは何ですか? – error2007s

+0

あなたのバケットにはバケット名にドットはありませんか? –

答えて

2

: エラーメッセージ:HTTPリクエストを実行することができません。これは代理問題に終わった。私はこれを克服するために次のことをしなければならなかった。私がネットワーク上の問題を克服したとき、S3エンドポイントの設定を求める別の例外がありました。コードの変更は以下のとおりです。

public static final String PROXY_HOST = "<my proxy hostname>"; 
public static final int PROXY_PORT = <my_proxy_port>; 
public static final String S3_ENDPOINT = "https://s3.amazonaws.com"; 

ClientConfiguration clientCfg = new ClientConfiguration(); 
clientCfg.setProtocol(Protocol.HTTP); 
clientCfg.setProxyHost(PROXY_HOST); 
clientCfg.setProxyPort(PROXY_PORT); 

AmazonS3 s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain(), clientCfg); 

s3Client.setEndpoint(S3_ENDPOINT); 
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1)); 
+1

解決策が含まれているので、あなた自身の答えを受け入れて、この質問がもう返答されないように見えないようにすることができます。 –