Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用https连接的AmazonS3SDK_Amazon Web Services_Amazon S3_Aws Java Sdk - Fatal编程技术网

Amazon web services 使用https连接的AmazonS3SDK

Amazon web services 使用https连接的AmazonS3SDK,amazon-web-services,amazon-s3,aws-java-sdk,Amazon Web Services,Amazon S3,Aws Java Sdk,我当前基于REST访问复制S3存储桶上对象的代码不起作用。我的S3存储桶配置为https访问,并且还启用了sse。我如何修改下面的代码使其工作? 目前,我刚刚收到一条错误消息“捕获到AmazonClientException,这意味着客户端在尝试与S3通信时遇到错误,例如无法访问网络。 错误消息:无法执行HTTP请求:mybucket.s3.amazonaws.com' @PUT @Path("/copy/{bucketName}") public void copyObject

我当前基于REST访问复制S3存储桶上对象的代码不起作用。我的S3存储桶配置为https访问,并且还启用了sse。我如何修改下面的代码使其工作? 目前,我刚刚收到一条错误消息“捕获到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());
        }
    }

解决了。这最终成为一个代理问题。为了克服这个问题,我必须做以下几点。当我克服了网络问题时,我遇到了另一个异常,要求我设置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));
公共静态最终字符串PROXY_HOST=”“;
公共静态final int PROXY_PORT=;
公共静态最终字符串S3_端点=”https://s3.amazonaws.com";
ClientConfiguration clientCfg=new ClientConfiguration();
setProtocol(Protocol.HTTP);
setProxyHost(代理主机);
clientCfg.setProxyPort(代理端口);
AmazonS3 s3Client=新的AmazonS3客户端(新的DefaultAWSCredentialsProviderChain(),clientCfg);
s3Client.setEndpoint(S3_端点);
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));

您使用的SDK及其版本是什么?您的bucket名称中没有点,是吗?因为它包含解决方案,您可能希望接受自己的答案,这样这个问题就不会再显示为未回答。