Amazon S3 SDK с https-подключением

Мой текущий код для доступа на основе REST к копированию объектов в моей корзине S3 не работает. Моя корзина S3 настроена на доступ по протоколу https, а также включена поддержка sse. Как мне изменить приведенный ниже код, чтобы он работал? В настоящее время я просто получаю сообщение об ошибке «Caught a AmazonClientException, что означает, что клиент столкнулся с ошибкой при попытке связаться с S3, например, не имея доступа к сети. Сообщение об ошибке: невозможно выполнить HTTP-запрос: mybucket.s3.amazonaws.com.

@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());
        }
    }

person everydaylearn    schedule 21.06.2016    source источник
comment
Какой SDK и его версию вы используете?   -  person error2007s    schedule 21.06.2016
comment
В названии вашего ведра нет точек, не так ли?   -  person Michael - sqlbot    schedule 21.06.2016


Ответы (1)


Решил это. Это оказалось проблемой прокси. Мне пришлось сделать следующее, чтобы преодолеть это. Когда я преодолел проблему с сетью, у меня появилось еще одно исключение, которое попросило меня установить конечную точку 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));
person everydaylearn    schedule 21.06.2016
comment
поскольку он содержит решение, вы можете принять свой собственный ответ, чтобы этот вопрос больше не оставался без ответа. - person Henrik Opel; 29.06.2016